• ベストアンサー

EXCEL関数のCHOOSEについて

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

  • kupou
  • お礼率100% (8/8)

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

  • ベストアンサー
  • 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/1246)
回答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

  • エクセルの関数について : CHOOSE関数

    複数範囲のtrimmeanを計算するのに下記のような関数式を使っていますが、 CHOOSE関数を通すと空白セルがあると0で集計されてしまい、正しい値が出ません。 どのようにしたらよいでしょうか? =TRIMMEAN(CHOOSE({1,2,3},Sheet1!A1:A3,Sheet2!A1:A3,Sheet3!A1:A3),0.1) たとえばシートの内容が下記のようになっていたとすると、 CHOOSE関数を通すと空欄""が0で置き換えられてしまい、 [欲しい結果]=trimmean([1,1,"",1,1,"",1,1,""],0.1)=trimmean([1,1,1,1,1,1], 0.1) [計算結果]=trimmean([1,1,0,1,1,0,1,1,0], 0.1) になってしまい、正しく計算されません。 ■セルの値■ [Sheet1] A1 : 1 A2 : 1 A3 : "" [Sheet2] A1 : 1 A2 : 1 A3 : "" [Sheet2] A1 : 1 A2 : 1 A3 : ""

  • Excel2003のユーザー定義関数でセルに色をつけたい

    Excel2003のユーザー定義関数で、RGBの値を指定してセルに色をつけたいと考えています。 具体的には、 =CellColor(255,100,33) のように、RGBの値を引数にとり、そのセルに色をつけることは可能でしょうか? マクロを使えば可能ですが…。 また、同時にかなりの数の色を同じシートに出したいのですが、色の数に制限があるというのは本当でしょうか? そうだとすると、マクロで実現できたとしても不可能ですよね? 以上、よろしくお願いいたします。

  • Excel関数について

    Excel関数について質問です。 以下の二つ (1) 下のように、セルA1から入力されてるものを、1、2、3・・と数字順に並び替える良い方法はありますでしょうか。 A-1 A-10 A-10A A-100 A-2 A-20 A-22.5 ・ ・ A-555 ・ ・ (2) 一行目と二行目に値の入ったセルと空白セルが混在しています。どちらも同じものに対する値の為、一行目にまとめようと、一行目の空白セルに二行目のセル(下)に値がある場合はその値を返し、空白の場合は空白のままにするというIF関数を使いましたがうまくいきませんでした。三行目と四行目、五行目と六行目・・とかなりあります。良い方法を教えていただけますでしょうか。 よろしくお願いいたします。

  • Excel2010で3つの値のうち最も少ない値

    Excel2010で3つの値のうち最も少ない値を返して、もしその値が空白だったらゼロと認識する。としたいのですが、 どのような関数にしたらよいのでしょうか? どなたかおしえてください。 例) A1:3 A2:5 A3:(空白) この3つのセルのうち最も少ない数を返す。 =MIN(A1,A2,A3) だと、値3が返ってしまいます。空白もゼロと認識して値0を返したいのです。 ですが、この3つのセル以外に空白セルを残すため、Excel昨日の「空白にゼロ値を表示する」を使いたくありません。 どうぞよろしくお願いいたします。

  • EXCEL関数について

    EXCEL関数について Sheet1、A1~A1000セルに「1~10」までの値がランダムに入力されております。 数字は「グループ1」、「グループ2」・・・という意味です。 B列、B1~B1000セルには「1~4」までの値がランダム入力されております。 B列については、空白のセルもあります。 Sheet2、A1~A10セルに、「1~10」までの値、「グループ1」~「グループ10」までが順に入力されております。 ここで、Sheet2、B列~E列、それぞれの1~10セルを使用し、、 それぞれの「グループ」がSheet1にて「1~4」の値をいくつずつ選んでいるか算出したいのです。 「グループ1」について、「1」のカウントはB1セル、「2」のカウントはC1のセルに返します。 同じように「グループ2」はB2~E2のセルに、「グループ3」はB3~E3のセルに値を返したいのです。 「COUNTIF」等の関数でいろいろと試してみたのですがうまく反映されません。 拙文乱文、大変恐縮ですが、ご教示頂きたく何卒宜しくお願い致します。

  • EXCEL関数:セル内の値判断による前後データ分割

    いつもとても参考にさせて頂いております。 EXCELの関数の組み合わせで、セルに入っている値をある文字の位置を探して、その前後で別のセルの複数のセルに値を分割することは可能でしょうか。 例として、A列の各行のセルに入っている値を『.』(半角のドット)がある前提で、その前後の値をB列とC列の各行に入れるために、関数で処理したいということです。尚、『.』の場所は決まっていませんし、前後の値の文字数も異なります。 === A列 1.国税庁 2.金融庁 : 10.文部科学省 : 100.東京都 101.神奈川県 === === B列 1 2 : 10 : 100 101 === === C列 国税庁 金融庁 : 文部科学省 : 東京都 神奈川県 === よろしくお願い致します。

  • EXCEL2010で関数が消えてしまう

    EXCEL2010をWindows7で使用しています。 セルに曜日を表示する関数を入力し、月を更新すれば、自動で曜日も更新されるようになっています。 月を更新したときに変わらない曜日があったので、確認してみるとセルに入力されていた関数が消え、値のみが入っていました。別のセルの曜日関数をコピーしたのですが、一度関数を再入力してEnterを押すと、また値のみになり、消えてしまいます。値複写で上書きしたような感じです。 別のセルで試してみても同様の現象が起こりました。 原因として何が考えられるでしょうか。

  • Excel関数:vlookup関数について

    Excel関数:vlookup関数について 前回質問した内容に関連したことですが、vlookupで四番目の引数[検索の型]を省略した場合、対象となる検索値が見つからない時に、近似値を引っ張ってくるということなのですが、前回私が困った問題においては、対象となる検索値があったにも関わらず、「検索の型」を省略したことで、対応する値を正しく引っ張ってきてくれませんでした。 =vlookup(year()&"/"&month(),B:C,2)という式において、2010/1~2010/8までは対応する値を引っ張ってきますが、2010/9以降は正しくない値を引っ張ってきました。2010/9は2010/12に対応する値を、2010/10~2010/12は2010/1に対応する値を引っ張ってきていました。 この理由を教えて頂きければと思います。すみませんが、宜しくお願いいたします。

  • Excel関数について

    Excel関数について質問させて下さい。 得点者リスト一覧で 1位から順番に順位を付ける為の関数をお教え下さい。 例:セル1-氏名。 セル2-得点。 セル3-順位を表示したいセル セル1 セル2  セル3 A   100点 B    90点 C   87点 D   111点 上記のようなリストで1位から順位を“セル3”の列に付けたいんです。 以上宜しくお願い致します。

  • EXCEL関数について

    EXCEL関数について B1~E1セルが1箇所でも空白でない場合、A1セルに「1」を返す式を 「COUNTBLANK」関数と「IF」関数を使って試みたのですがうまく行きません。 B1~E1セルがすべて空白の場合はA1セルも空白になります。 ご教示頂きたくお願いいたします。

専門家に質問してみよう