- 締切済み
EXCELでリストにより呼び出し関数を変える
データのフォーマットを変換したいのですが、例えば値が日時の場合はリストから「時間」を選択したら日付のフォーマット関数を適用したいです。IF文でのイメージは以下の感じです。 =IF(AE38="時間",TEXT(AC38,"yyyymm"),IF(AE38="金額",TEXT(AC38,"000000000000000"),"")) これが金額と時間の2種類だけならIF文で乗り切れますが、時間だけでも複数あるため、どこかに関数群を定義してLOOKUPで動的に・・が理想です。 VBAは考えておりません。EXCEL単独で何か良い方法ございませんでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- cafe_au_lait
- ベストアンサー率51% (143/276)
TEXT関数しか使用しないのであれば、 時間 yyyymm 金額 00000 のような表を作っておいて、 =TEXT(AC38,VLOOKUP(AE38,対応表範囲,2,FALSE)) でいかがでしょうか。
- mt2008
- ベストアンサー率52% (885/1701)
こんなのはどうでしょう 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) これなら種別が増えても対応可能だと思います。
お礼
これは全く想像できませんでした。こういう発想大好きです。(理系の方でしょうか?) 早速トライしてみようと思います。 ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
あなたの発想は進んでいると思う。しかしエクセルの関数の現状を経験不足でご存じない。そして特別なことだと言う認識にいたっていない。 適用する関数式はVLOOKUPで探せるでしょう。しかしその探した文字列を関数として働かす仕組みがエクセルには無い。 そういうレベルは解決すべき課題として、MS社は思慮に入れてないと思う。 MSのソフト技術者の力を以ってすれば造作も無いことと思うが。 やるならVBAを勉強してどうぞと言うことだと予測する。 これを認めると、シートの式の読みが複雑になりすぎると思う。 ーー Evaluateという仕組みを作っているソフトが有るらしい。 またエクセル関連で GOOGLEで「evaluate エクセル」で照会のこと。 ーー また関数で表示形式の設定(左右する)は出来ませんから、変な思考に迷い込まないこと。 ーー 結論はVBAでこなせる内容かどうかということ。VBAででも質問に内容の全貌の記述がなく、答えが出ない。
お礼
実は単なる検証ツールを作成していて、それ自体に問題があるのでは、という疑念は避けたい。しかも作っている私も居なくなってしまうので、その後のメンテ、可用性を下げたくない。との理由でEXCELだけにこだわっています。 「探した文字列を関数として働かす仕組みがエクセルには無い」←色々調べた。 「表示形式の設定(左右する)は出来ません」←色々試した。 これらの疑問が解けただけでも大変勉強になりました。 ありがとうございました。
お礼
シンプルで実用的ですね。 ただこれ以外にもコード値変換や、半角全角変換など多岐に渡っていて、できれば色んな関数を定義したいです。 でも欲張るのは良くないですね。 参考にさせていただきます。 ありがとうございます。