エクセル数式の選択方法について

このQ&Aのポイント
  • エクセルで複数の表から条件に応じて数式を選択する方法について教えてください。
  • 具体的には、Aと入力したら表Aの数式を、Bと入力したら表Bの数式を選択したいです。
  • 初心者なので、分かりやすく教えていただけると助かります。
回答を見る
  • ベストアンサー

エクセル数式の選択。

(表A)=INDEX(総合見積もり!$E$15:U19,MATCH(D5,総合見積もり!$D$15:$D$19,0),MATCH($E$3,総合見積もり!$E$14:$U$14,0)) (表B)=INDEX(総合見積もり!$E$22:$T$26,MATCH(D5,総合見積もり!$D$22:$D$26,0),MATCH($E$3,総合見積もり!$E$21:$U$21,0)) (表A)(表B)2つの表を元に二通りの数式を作ったのですが。 仮にE3のセルにAと入力すると(表A)の数式、Bと入力すると(表B)の数式を選択する関数又は方法 ありましたら教えて下さい。 IF関数で出来そうなのですがエクセル初心者のため良く分かりません 宜しくお願いします。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 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)),""))

msyk1122
質問者

お礼

できました! スッキリです。 ありがとうございました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

  使用関数種類が同じで、、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など出しているが、それ以外の言っていることを、参考にしてください。

msyk1122
質問者

お礼

ありがとうございます。 がんばってやってみます。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.4

別の方法で(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))

msyk1122
質問者

お礼

ありがとうございます。 がんばってやってみます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

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」を間違えないように気を付けてください。

msyk1122
質問者

お礼

ありがとうございます。 がんばってやってみます。

回答No.1

(表A)の数式が A1セル (表B)の数式が B1セル にあると仮定し E3セルに「A か B」を入れる。 =IF(E3="A",A1,IF(E3="B",B1,"E3セルでAかBを選択してね")) これでいかがでしょう?

msyk1122
質問者

お礼

ありがとうございます。 がんばってやってみます。

関連するQ&A

  • ExcelセルにVBAでINDEX関数を入力

    ExcelでINDEX関数とMATCH関数で"B11:E13"セルに以下の数式データがあります。 数式は "B11"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))) "B12"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))) "B13"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))) "C11"==IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))),"",INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))) "B15~B23"に数値1~3を入力した場合イニシャルA~I が入力される式ですが、列を連続で入力できるような処理をVBAのWorksheetFunctionで行うにはどのようにコードを記述すればよいのでしょうか。 ご回答のほどよろしくお願いします。

  • エクセルの関数組み合わせについて

    エクセルの関数組み合わせでうまくいかず困っています。 (1)あるセルに紙サイズを入力し、別シートにある一覧表行から参照 (2) (1)と同じ行の別セルに部数を入力し、別シートにある一覧表列の以上~未満で参照 (3) (1)と(2)の交差する値を反映。 イメージを添付しました。 以下の式を入れて、サイズと部数から反映できるのですが、以上~未満がうまくいきません。40,000や50,000で入れるとできますが、45,000や47,000などを入れた場合の数式がうまくいきませんでした。 =IF(ISERROR(INDEX(単価表!$B$3:$F$42,MATCH($D6,単価表!$A$3:$A$42,0),MATCH($B6,単価表!$B$2:$F$2,0))),"",(INDEX(単価表!$B$3:$F$42,MATCH($D6,単価表!$A$3:$A$42,0),MATCH($B6,単価表!$B$2:$F$2,0)))) どなたかお力を添えていただければと存じます。 なにとぞよろしくお願いします。

  • Excel2003の数式設定について教えて下さい。

    Excel2003の数式設定について教えて下さい。 【C1セル】には 数式「=IF(A1="","",A1)」 【D1セル】には 数式「=IF(B1="","",B1)」 【E1セル】には 数式「=IF(AND(ISBLANK(C1),ISBLANK(D1)),"",(IF((C1+D1)=0,"---",C1+D1)))」 と設定した状態で、 【A1セル】に 数値「100」と入力し、 【B1セル】に 数値「200」と入力した場合、 【E1セル】は 「300」と出力されますが、 【A1セル】、もしくは【B1セル】を 空欄にした場合、 【E1セル】は エラーとなり、「#VALUE」と出力されてしまいます。 小生としては、【C1セル】【D1セル】の両セルとも表示上は空欄の為、 ISBLANK関数でTRUEと判定し、【E1セル】は空欄になってほしいのですが、 【C1セル】や【D1セル】には数式が設定されている為、 ISBLANK関数でTRUEと判定されずに、「IF((C1+D1)=0」の演算でエラーとなっている様です。 小生が実現したいこと、 「【C1セル】と【D1セル】の数式の実行結果が空欄以外の時のみ、  【E1セル】の数式を実行する。」 の方法をご存知の方、教えて下さい。お願い致します。

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

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

  • EXCELの貼り付けについて

    EXCELについての質問です。質問がくだらなければ申し訳ございません。 A1のセルに =IF(ISERROR(INDEX(一覧表!B4:B93,MATCH(1,一覧表!G4:G93,0))),"",INDEX(一覧表!B4:B93,MATCH(1,一覧表!G4:G93,0))) を入力しており、 A2セルには =IF(ISERROR(INDEX(一覧表!B4:B93,MATCH(2,一覧表!G4:G93,0))),"",INDEX(一覧表!B4:B93,MATCH(2,一覧表!G4:G93,0))) A3には =IF(ISERROR(INDEX(一覧表!B4:B93,MATCH(3,一覧表!G4:G93,0))),"",INDEX(一覧表!B4:B93,MATCH(3,一覧表!G4:G93,0))) と下へ入力していきたいのです。 貼り付けなどを利用して、簡単に入力できる方法はないでしょうか? お分かりの方、ご教授お願い致します。

  • この数式(関数)の内容を教えて下さい

    お早うございます。いつも、お世話になっております。実は、このOKWaveサイトでエクセルの表の仕分けについて質問しました。皆さまに、懇切丁寧に教えて頂き、つい先ほど何回も繰り返し読み返し作業した結果、無事、一番やりたかったことが出来ました。そこで、今後、エクセルをもっと使いこなせるように、二人の方に回答頂いた次の数式(関数?)は、どういう事を、表しているのでしょか?また、これに関しては、どのサイトで勉強すればいいのでしょうか?教えて下さい。 まず、下記の数式です。 =IF(ISNUMBER(B1),B1,TRIM(B1)) 次に下記の式です。これは、2段階で作業するように指示されました。 (1)まず、を入力する。 =IF($A2=D$1,COUNTIF($A$2:$A2,D$1),"") (2)そして、下記を入力する。 =INDEX(Sheet1!$B:$B,MATCH(ROW(A1),Sheet1!D:D,0)) どうぞ、今後の勉強のため宜しくお願いします。

  • エクセル2010 同データの検索と関連セルの表示

    先の質問、 http://okwave.jp/qa/q8405162.html において、実践後の画像を再アップさせて頂きます。 まずは、S1セルに =IF(INDEX($Y:$Y,ROW())="","",INDEX($Y:$Y,ROW())&"■"&COUNTIF(INDEX($Y:$Y,1):INDEX($Y:$Y,ROW()),INDEX($Y:$Y,ROW()))) を入力後、ctrl + ENTER で確定し、オートフィルで最下部まで。 その後、すべてctrl + ENTER で 以下を貼り付けました。 B9セル =IF(INDEX($4:$4,COLUMN())="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN())),"",IF(INDEX($V:$V,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($V:$V,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) B10セル =IF(INDEX($4:$4,COLUMN())="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN())),"",IF(INDEX($Z:$Z,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($Z:$Z,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) B11セル =IF(INDEX($4:$4,COLUMN())="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN())),"",IF(INDEX($AA:$AA,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($AA:$AA,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) B12セル =IF(INDEX($4:$4,COLUMN())="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN())),"",IF(INDEX($AC:$AC,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($AC:$AC,MATCH(INDEX($4:$4,COLUMN())&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) C9セル =IF(INDEX($4:$4,COLUMN()-1)="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN()-1)),"",IF(COUNT(INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))),LOOKUP("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))),""))) C9セルの書式設定の表示形式を[日付]に。 C10セル =IF(ISERROR(1/(INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)<>"")),"",INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)) C11セル =IF(INDEX($4:$4,COLUMN()-1)="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN()-1)),"",IF(INDEX($AB:$AB,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($AB:$AB,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) C12セル =IF(INDEX($4:$4,COLUMN()-1)="","",IF(ROUNDUP((ROW()-ROW($A$8))/4,0)>COUNTIF($Y:$Y,INDEX($4:$4,COLUMN()-1)),"",IF(INDEX($AD:$AD,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))="","",INDEX($AD:$AD,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0))))) 機器Aの1回目は求める数値を抜き出して表示してくれています。 それを、コピー&ペーストで 機器Bの1回目、機器Aの2回目に貼り付けました。 これは、オートフィルでも同じ数値が帰って来ます。 それで問題点なのですが、 機器Bの1回目、E9セルには1月1日と、E10セルには空白が帰って来ています。 また機器Aの2回目も同じ場所、C13セルが1月2日と、C14セルが空白で帰って来ています。 ちなみにE9セルの数式は =IF(ISERROR(1/(INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)<>"")),"",INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)) E10セルの数式は =IF(ISERROR(1/(INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)<>"")),"",INDEX($U:$U,MATCH("9999/12/31"+1,INDEX($U:$U,1):INDEX($U:$U,MATCH(INDEX($4:$4,COLUMN()-1)&"■"&ROUNDUP((ROW()-ROW($A$8))/4,0),$S:$S,0)))+3)) となっています。 これで問題点が明らかになるでしょうか? よろしくお願いいたします。

  • EXCEL 数式が入った空白セルを数える

    毎度お世話になっています。 質問の内容ですが、例えば下記のようなシートがあるとします。 セルB1、セルC1、セルD1:手入力セル セルA1:数式「=IF(B1="","",B1+C1)」 セルA2:文字列 セルA3:数式「=IF(D1="","",D1*0.1)」 セルA4:文字列 セルA5:A1+A3の計算結果を表示 (※なお、セルA2、A4は数値が入らない) というような場合において、 ●セルB1、C1、D1になにも入力されていない場合、セルA5が空白となる。 ●セルB1、C1にのみ数値が入力されている場合、セルA5の計算結果がセルA1の値のみ。 ●セルD1にのみ数値が入力されている場合も上記と同様に計算結果が表示される。 以上の条件を満たす数式をセルA5に入力したいのですが、 COUNTBLANKは数式が入っている場合には使えず、COUNTAの場合だとセルA1、A3のどちらにも数値が入った場合に表示される、といった数式になります。 IFをいくつも使えば可能とは思いますが、もう少し単純に数式を作れたらと思い質問をさせて頂きました。 よろしければ御回答宜しくお願い致します。 (内容を訂正したため、いったん質問を削除しました。もし御回答中の方が居ましたら申し訳ありませんでした。)

  • Excelの関数について教えてください。

    前にも同じような質問をしたのですが、よく理解できなかったので、もう一度質問させていただきます。 まず、A列に1~10まで入力します。次にB列に11~20まで入力します。同様にC列に21~30まで入力します。そして、セルE3に2、セルE5に12に入力します。 それから、セルE3の値をA列から検索し、セルE5の値をB列から検索し、その重なったB行のC列の値を求めたいのです。ここでは22になります。 自分なりに考えてみましたが、 =IF(MATCH(F3,A:A)=MATCH(F5,B:B),INDEX(A2:C10,MATCH(F3,A:A)=MATCH(F5,B:B),C:C,"")) ではエラーがでてしまいます。 いくら考えてもわかりません。 どなたか教えてください。よろしくお願いします。

  • エクセルの0値について

    エクセルの0値非表示についての質問です。 過去の質問等を閲覧させて頂きましたが、自分のケースだと計算式が成り立ちませんでした。 0値にしたいセルには数式が入っており、更にそのセルの値を別のセルに数式で返しております。 よって非表示にするだけでは計算がおかしくなってしまいます。 そこでIF関数を使っているのですが、現在の数式では IF(A2="","",IF(B1="","",COUNT(B2:G2))) といった感じです。 A2には商品名、B1には日付、そしてB2からG2までには売上データが入力されています。 エクセルの表には1ヶ月分のデータ入力用のフォーマットが出来ています。 A  B  C  D  E  F  G -- 1日 2日 3日 4日 5日 6日 商品 20 50 30 40 60 40 商品 20 50 30 80 40 30 商品 70 80 50 50 90 30 以上、文章がヘタで分かりにくいとはおもいますが、よろしくお願い致します。

専門家に質問してみよう