こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

EXCELでリストにより呼び出し関数を変える

データのフォーマットを変換したいのですが、例えば値が日時の場合はリストから「時間」を選択したら日付のフォーマット関数を適用したいです。IF文でのイメージは以下の感じです。
=IF(AE38="時間",TEXT(AC38,"yyyymm"),IF(AE38="金額",TEXT(AC38,"000000000000000"),""))

これが金額と時間の2種類だけならIF文で乗り切れますが、時間だけでも複数あるため、どこかに関数群を定義してLOOKUPで動的に・・が理想です。
VBAは考えておりません。EXCEL単独で何か良い方法ございませんでしょうか?

よろしくお願いします。

投稿日時 - 2009-05-13 14:11:27

QNo.4955312

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

TEXT関数しか使用しないのであれば、

時間yyyymm
金額00000

のような表を作っておいて、

=TEXT(AC38,VLOOKUP(AE38,対応表範囲,2,FALSE))

でいかがでしょうか。

投稿日時 - 2009-05-13 15:24:52

お礼

シンプルで実用的ですね。
ただこれ以外にもコード値変換や、半角全角変換など多岐に渡っていて、できれば色んな関数を定義したいです。

でも欲張るのは良くないですね。
参考にさせていただきます。
ありがとうございます。

投稿日時 - 2009-05-13 16:02:37

ANo.2

こんなのはどうでしょう
Sheet1のAC38に元の値、AE38にリストで選択できる「時間」「金額」等の種別が入っている。AD38にAE38で選択した種別に対応した表示形式でAC38の値を表示すると仮定します。

別シート(例:Sheet2)に種類と文字列に整形した値の表を作成した方が良いでしょう。
A列に「標準」「時間」「金額」…とAE38で選択できる種別を入力。
B1には =Sheet1!AC38 と入れる。
B2以降は、種別に対応した表示形式に変換した文字列が入るようにする
例:=TEXT($B$1,"000000000000000")

Sheet1に戻ります。
AD38に↓の式を入れて、Sheet2で変換した文字列を表示する。
=VLOOKUP(AE38,Sheet2!$A:$B,2,FALSE)
これなら種別が増えても対応可能だと思います。

投稿日時 - 2009-05-13 15:01:09

お礼

これは全く想像できませんでした。こういう発想大好きです。(理系の方でしょうか?)
早速トライしてみようと思います。
ありがとうございます。

投稿日時 - 2009-05-13 15:55:41

ANo.1

あなたの発想は進んでいると思う。しかしエクセルの関数の現状を経験不足でご存じない。そして特別なことだと言う認識にいたっていない。
適用する関数式はVLOOKUPで探せるでしょう。しかしその探した文字列を関数として働かす仕組みがエクセルには無い。
そういうレベルは解決すべき課題として、MS社は思慮に入れてないと思う。
MSのソフト技術者の力を以ってすれば造作も無いことと思うが。
やるならVBAを勉強してどうぞと言うことだと予測する。
これを認めると、シートの式の読みが複雑になりすぎると思う。
ーー
Evaluateという仕組みを作っているソフトが有るらしい。
またエクセル関連で
GOOGLEで「evaluate エクセル」で照会のこと。
ーー
また関数で表示形式の設定(左右する)は出来ませんから、変な思考に迷い込まないこと。
ーー
結論はVBAでこなせる内容かどうかということ。VBAででも質問に内容の全貌の記述がなく、答えが出ない。

投稿日時 - 2009-05-13 14:45:17

お礼

実は単なる検証ツールを作成していて、それ自体に問題があるのでは、という疑念は避けたい。しかも作っている私も居なくなってしまうので、その後のメンテ、可用性を下げたくない。との理由でEXCELだけにこだわっています。
「探した文字列を関数として働かす仕組みがエクセルには無い」←色々調べた。
「表示形式の設定(左右する)は出来ません」←色々試した。

これらの疑問が解けただけでも大変勉強になりました。
ありがとうございました。

投稿日時 - 2009-05-13 15:51:15

あなたにオススメの質問