• ベストアンサー

EXCEL関数のCHOOSEについて

EXCEL関数のCHOOSEについて CHOOSEの第2引数以降の可変引数を別セルで定義して、 値を呼び出す方法を教えてください。 イメージ例: A1には"東京","北海道","神奈川" A2には=CHOOSE(1,A1) をして、"東京"が呼び出されることを求めています。 ※この例のA2結果は、"東京","北海道","神奈川"になってしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

A1には 東京,北海道,神奈川 A2 に数字を入れる A3 に以下の数式を入れる =MID(A1,FIND("^",SUBSTITUTE(","&A1,",","^",A2)),FIND("^",SUBSTITUTE(","&A1&",",",","^",A2+1))-FIND("^",SUBSTITUTE(","&A1,",","^",A2))-1) そうでないなら、ユーザー定義関数にします。 使い方 A1; 東京,大阪,福岡,沖縄 A2;1 A3; =fChoose(A2,A1) この数式、Choose の代わりにも使えます。 '//標準モジュールに貼り付ける Function fChoose(i As Integer, ParamArray Ar())  Dim arBuf As Variant  If UBound(Ar) = 0 Then   If InStr(Ar(0), ",") > 0 Then    arBuf = Split(Ar(0), ",")   Else    fChoose = Ar(0)    Exit Function   End If   If i > (UBound(arBuf)) Then i = UBound(arBuf) + 1   fChoose = arBuf(i - 1)  Else  If i > (UBound(Ar) + 1) Then i = UBound(Ar) + 1   fChoose = Ar(i - 1)  End If End Function

kupou
質問者

お礼

ご回答していただきありがとうございました。 文字列分割にCHOOSEを利用できれば、 簡単な数式で表現できると思い、質問しました。 VBAを使用するのであれば、 可変引数を別セルで定義して評価し、 値を取得できる糸口を見つけることができました。

その他の回答 (1)

  • soixante
  • ベストアンサー率32% (401/1245)
回答No.1

直接の回答でないですが。 A1セルに3つのデータを入れてしまうのはあまり得策ではないと思います。 あなたにとっては、東京・北海道・神奈川という3つのデータかもしれませんが、エクセルとしては、あくまでA1セルの値という一つのものでから。 どうしてもA1セルに、東京、北海道、神奈川 が入っている必要がありますか。 もしそうでないなら、A1に東京、B1に北海道、C1に神奈川として、 A2セルに =CHOOSE(1,A1,B1,C1) とするのがノーマルですが、もうそれは分かってますよね、すみません。 出されているのが一例なので何ともいえませんが、本当はもっと汎用性を持たせたいのだと思います。 CHOOSEの第一引数のところが変わったりするのでしょう。 でしたら、選択肢となるデータの部分を適性に配置すれば、INDEX関数、MATCH関数、などを使えば比較的簡単に出来るでしょう。

kupou
質問者

お礼

ご回答していただきありがとうございました。 質問の意図としては、以下になります。 (1)文字列分割にCHOOSEを利用できれば、 簡単な数式で表現できるのではないか。 (2)可変引数を別セルで定義して評価できれば、 EXCEL関数の利用方法が増えるのではないか。 VBAでは、Evaluate関数が存在したので、 (2)→(1)が実現できると思いましたが、 VBAのEvaluate関数は、 unixのevalと内容が違い、 実現ができないことがわかりました。

関連するQ&A