- ベストアンサー
エクセル数式の選択方法について
- エクセルで複数の表から条件に応じて数式を選択する方法について教えてください。
- 具体的には、Aと入力したら表Aの数式を、Bと入力したら表Bの数式を選択したいです。
- 初心者なので、分かりやすく教えていただけると助かります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
一例です。 E3がA、Bでない場合は空白としています。 =IF(E3="A",INDEX(総合見積もり!$E$15:U19,MATCH(D5,総合見積もり!$D$15:$D$19,0),MATCH($E$3,総合見積もり!$E$14:$U$14,0)),IF(E3="B",INDEX(総合見積もり!$E$22:$T$26,MATCH(D5,総合見積もり!$D$22:$D$26,0),MATCH($E$3,総合見積もり!$E$21:$U$21,0)),""))
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
使用関数種類が同じで、、MATCH関数の第1引数などが同じセルで、関数の参照範囲が2つにわかれている場合です。 (1)これを自由に関数で切り替えることは出来ません(仕組みは無いです)。 (2)2つのワークセルに2つの関数の結果(値)を出しておき、IF分でどっちかを取るという姑息な方法は使う気がしないでしょう。 (3)そのままIF関数で質問の関数を並べると式が長くなり、うんざりします。 (4)範囲を切り替えたいというニーズはVLOOKUP関数などで、果物ならこの表、野菜ならあの表と、検索表を分けて作っていると、そういうことが起こります。本来(複雑になるので)避けるべきですが。 いやになるのは、セルというスペースの狭いセルに、長い長い関数式を入れる場合ならではの話なので、私ならユーザー関数を作ることで、シート上の関数の見た目を短くします。 例 やさしくするため同一シートの別範囲の例にしてます。 検索表 D1:G5 野菜と果物で別表になっている例 りんご 12 ほうれん草 14 柿 4 レタス 7 いちご 5 きゅうり 9 バナナ 9 ーー ユーザー定義関数 Function sVLKUP(a) On Error GoTo p1 x = Application.WorksheetFunction.VLookup(a, Range("F1:G7"), 2, False) sVLKUP = x Exit Function p1: x = Application.WorksheetFunction.VLookup(a, Range("D1:E5"), 2, False) sVLKUP = x End Function のように、VBAだと長々と、なんぎょうにも書けます。 シートに入れる式は =sVLKUP(A2) と単純ですみます。 結果 レタス 7 いちご 5 きゅうり 9 ほうれん草 14 柿 4 ーー その場合検索表に名前をつけて、INDIRECT関数で切り替える方法も回答が出ます。 しかしどちらの表を使うかが、質問の場合D5セルの値がわかったとき、判明する必要があり、IF分で切り分けられるのですが 本件はA,Bのサインがるという説明ですが、人間が作っているようでは、うまく行かないでしょう。 質問のAやBは人間が判断してある列の各行に入れるのですか。 私の例では野菜、果物のサインは無いが、一方に見つからなければ他を見るという式になってます。 これが案外難しい。私の例で、果物か野菜の分類コードが、どの列かにあれば少しやさしくなる。 ーー VBAなど出しているが、それ以外の言っていることを、参考にしてください。
お礼
ありがとうございます。 がんばってやってみます。
- mshr1962
- ベストアンサー率39% (7417/18945)
別の方法で(E3は既に使用されてるのでE4でAorB) ■INDIRECT関数で名前参照で範囲指定 「挿入」「名前」「定義」で 総合見積もり!$E$15:U19 を 表A1 総合見積もり!$E$14:$U$14 を 表A2 総合見積もり!$E$22:$T$26 を 表B1 総合見積もり!$E$21:$U$21 を 表B2 と名前を付ける =INDEX(INDIRECT("表"&$E$4&"1"),MATCH(D5,INDIRECT("表"&$E$4&"1"),0),MATCH($E$3,INDIRECT("表"&$E$4&"2"),0)) ■OFFSET関数で範囲指定 =INDEX(OFFSET(総合見積もり!$E$14,IF($E$4="A",1,8),,5,17),MATCH(D5,OFFSET(総合見積もり!$E$14,IF($E$4="A",1,8),,5,17),0),MATCH($E$3,OFFSET(総合見積もり!$E$14,IF($E$4="A",0,7),,1,17),0))
お礼
ありがとうございます。 がんばってやってみます。
- keithin
- ベストアンサー率66% (5278/7941)
E3セルは既に各表の横項目を検索する項目を記入するため使っていますから,E2に表Aまたは表Bと記入することにします。 =IF($E$2="表A", INDEX(総合見積もり!$E$15:U19,MATCH(D5,総合見積もり!$D$15:$D$19,0),MATCH($E$3,総合見積もり!$E$14:$U$14,0)),IF($E$2="表B", INDEX(総合見積もり!$E$22:$T$26,MATCH(D5,総合見積もり!$D$22:$D$26,0),MATCH($E$3,総合見積もり!$E$21:$U$21,0)), "")) #言わずもがなですが「表A」と「表A」を間違えないように気を付けてください。
お礼
ありがとうございます。 がんばってやってみます。
- whiteocean
- ベストアンサー率33% (19/57)
(表A)の数式が A1セル (表B)の数式が B1セル にあると仮定し E3セルに「A か B」を入れる。 =IF(E3="A",A1,IF(E3="B",B1,"E3セルでAかBを選択してね")) これでいかがでしょう?
お礼
ありがとうございます。 がんばってやってみます。
お礼
できました! スッキリです。 ありがとうございました。