エクセルのmatchとindex関数の使い方とは?

このQ&Aのポイント
  • エクセルのmatch関数とindex関数を組み合わせることで、複数の検索条件から特定の値を取得することができます。
  • 例えば、「A社」「b工場」の「商品3」の値段「350」を取得したい場合、match関数を使って「A社」「b工場」のセルの位置を特定し、index関数を使って「商品3」のセルの位置を特定します。
  • そして、index関数の結果を使って指定したセルの値を取得することができます。他にもエクセルの関数を組み合わせることで、さまざまな条件から値を取得することが可能です。
回答を見る
  • ベストアンサー

エクセル matchとindex関数について

  A    B   C    D   E 1         商品1 商品2 商品3 2 A社 a工場  100  200  300 3 A社 b工場  150  250  350 4 B社 a工場  200  400  600 5 B社 b工場  300  600  900 検索条件が複数ある場合、例えば 「A社」「b工場」の「商品3」の値段「350」を出したければ 式はどのようになりますか? matchとindexを組み合わせていろいろ考えてみましたがうまくいきませんでした。 勉強不足で申し訳ありませんが、どうぞみなさまのお力をお貸しください。 matchとindex以外にも使える関数があれば教えてください。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! 一例です。 とりあえず100行目まで対応できる数式です。 ↓の画像でH4セルに =IF(COUNTBLANK(H1:H3),"",INDEX(C1:E100,SUMPRODUCT((A1:A100=H1)*(B1:B100=H2)*(ROW(A1:A100))),MATCH(H3,C1:E1,0))) という数式を入れています。 参考になりますかね?m(_ _)m

usausa33
質問者

お礼

早々にお返事いただきありがとうございます。 早速教えていただいた数式を試してみたところ ちゃんとできました! SUMPRODUCT関数を使うのは初めてですが このような使い方ができるのですね。 大変勉強になりました。 本当にありがとうございました。 助かりましたm(_ _)m

関連するQ&A

  • match関数とindex関数について

    index関数を次のように用いて、match関数で位置を取りだすことをしたいと考えています。 =index(0/$A$1:A20="休",0) matchは以下の上式を使って、以下のようにします。 =match(1,index(0/$A$1:A20="休",0)) この時、index内において、「休」だけでなく、「祝」も判定したいと考えた場合、上手い式の組み方は考えられるでしょうか。 ご教授願います。

  • INDEXとMATCH関数について。

    業務で使用しているファイルにINDEXとMATCHを組み合わせた関数を使っています。 =INDEX(Sheet4!E2:E999,MATCH(Sheet1!F17,Sheet4!A2:A999,0)+2,0) です。 教えて頂きたいことは、 ・上記の関数の説明(詳細)この関数はどういったしくみになっているのか。 ・セルが空白のときに#N/Aを表示させないこと。 ・完全一致型にしたいこと。 この3点を教えて頂けませんか?よろしくお願いします。

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

    エクセルのMATCH関数を使って“E18:E23”の表から125以下の1番目の値相当する”“E11:E16”の値を取り出す計算式を作成しています。(“E18:E23”表のそれぞれの行の数値が“E11:E16”の表のそれぞれの行の数値のリンクしています。そのときの数式が“=INDEX(E11:E16,MATCH(125,E18:E23,1),1)”です。この場合は上手くいくのですが、条件を“125以上の1番目の値相当するを作成して、”=INDEX(E11:E16,MATCH(125,E18:E23,-1),1)“の様にMATCHの式の最後を-1にするんですが、”#N/A“のエラーメッセージが表示します。どうすればいいのでしょうか?(*なお表“E18:E23”は数値が小さい順ですが、表“E11:E16”そうとは限りません)  それと、125以上の1番目だけでなく、2番目、3番目を拾い出す計算式はないでしょうか? 宜しくお願いします。関数に関しては初心者でいろいろ検索しましたが、ぴったり来ません。

  • ExcelでIndexとMatch関数が使いこなせない

    すみません、カテゴリを間違えてまして、再度投稿いたします。 有給管理表をExcelで作成しています。 シート1に社員のデータ表を入力してあり、 シート2には有給が発生する社員へ有給の残日数や 付与日に関するお知らせの案内状をB5サイズで作っています。 シート1のデータを拾って、シート2の案内状へ反映させる際、 付与日や残日数などはVlookupで参照できるのですが、 社員番号は退職した社員がいるため番号が飛んでいて うまくできません。 IndexやMatch関数を使えばなんとかなりそうだと思い やってみましたが、VALUE!が表示されてしまいます。 どなたかうまくいく関数を教えて頂けますでしょうか? シート1のデータ例  A列   B列   C列   D列    E列 社員番号  氏名  入社日  付与日   付与日数 100001   くま  2007/4/1  2007/10/1  10 100003   たぬき 2007/5/1  2007/11/1  10 100005   うさぎ 2007/5/10 2007/5/10  10  100010   きつね 2007/6/1  2007/12/1  10 シート2(例)ページ1    B列   C列 B1 社員番号  100001←ここに式を入れたい B2 社員氏名  くま  さん(vlookupでC1を拾ってくる) B4 あなたの有給付与日は  2007/10/1 です。付与日数は 10 日です・・・・・・。 シート2 ページ2 B30 社員番号  100003 (←ページ1の次の該当者を拾いたい) B31 社員氏名  たぬき  さん B33 あなたの有給付与日は 2007/11/1 です。 付与日数は 10 日です・・・・・・。 このような感じです。社員番号が飛んでいても下の行を拾っていくような関数はありますでしょうか?(Index、Match関数以外でも結構です)

  • match関数とindex関数について

    B列に空白を含む連続した数値の配列において、空欄と空欄の間の数値の個数を数える式として、以下の式を見たことがあります。 =IF(AND(B9<>"",B10=""),IF(ROW(B9)=COUNT($B$1:B9),ROW(B9),ROW(B9)-MATCH(1,INDEX(0/($B$1:B9=""),0))),"") 確かにこの式で求める答えが出るのですが、式の最後の「MATCH(1,INDEX(0/($B$1:B9=""),0)」の意味がよく分かりません。 ・MATCH関数の範囲としているINDEXの内容はどういう意味なのか ・MATCH関数の検査値としている「1」はどういう意味なのか ご教授願います。

  • MATCH関数?INDEX関数?

    いつもお世話になってます。 2のエクセルデータ、AとBがあります。 Aのファイルが基本ファイルで、Bファイルが必要項目をAより転記してみんなで閲覧するファイルです。 Aのファイルが下記のように入力されているとします…。  日付  No.  ロッド番号1 ロッド番号2  得意先           金額1 金額2 8/22  5-11   123               ○×商事          \100     8/23  5-12              555    △△株式会社      \200   8/24   5-13   124               有限会社◆         \500     \200 8/24   5-13                556    ○×商事          \300 8/25   5-14             557    有限会社◆         \800 ロッド番号1、ロッド番号2とそれぞれ別の商品があり、番号があり金額が入力されています。 No.は受付番号でロッド番号1、2をそれぞれ購入の場合は同じ受付番号を使います。 Bのファイルにはロッド番号1のシート、ロッド番号2のシートがありそれぞれAより、必要項目が転記されています。 これまではロッド番号をもとにVLOOKUP関数でBへ転記していましたが、No.が同じ場合にうまくいきませんでした。 おそらくMATCH関数、INDEX関数を使うのだと思いますが、どのように組んだらよいのかわかりません。 Aの項目内容は変えられません。 関数にお詳しい方、ご教授いただきたいです。

  • INDEX関数?それともMATCH関数?

    INDEX関数?それともMATCH関数? エクセル2000で下記の様な事をしたいのですが、どうしても分からず思い悩んでいます。 どなたか分かる方がいらしたら、教えてください。 【この表について】 ・予測A(行3)と予測B(行20)と予測(行30)は最初から入っている数値 ・結果A(行4)と結果B(行21)に左から1クール終わるごとに数値が入力される ・結果A(行4)と結果B(行21)に数値が入ると、実績(行31)が表示される ・(行38)と(行39)は予測Aに対する予測Bの割合 【やりたいこと】 <黄色のセル> (1)B31が表示されたらB38を表示 (2)B31~C31が表示されたらC38を表示 (3)B31~D31が表示されたらD38を表示 (4)B31~D31が全て空白ならばD38を表示 (FGHについても同様に表示させたい) →現在の数式は(1)~(3)についてはできるのですが、(4)の場合に#N/Aとなってしまいます。 <赤色セル> (1)B31が表示されたらB38を表示 (2)B31~C31が表示されたらC38を表示 (3)B31~D31が表示されたらD38を表示 (4)B31~D31とF31が表示されたらF39を表示 (5)B31~D31とG31が表示されたらG39を表示 (6)B31~D31とH31が表示されたらH39を表示 (7)B31~D31とF31~H31が全て空白ならばH39を表示 →これもINDEXやMATCHを使って色々考えてみたのですが、(7)の時が#N/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で行うにはどのようにコードを記述すればよいのでしょうか。 ご回答のほどよろしくお願いします。

  • vlookupに、Indirect と Match 関数を組み合わせる

    vlookup関数で、検索値にSheet1(Book1)から、範囲は、Sheet2(Book1)のセルにある名前のついているSheet1(Book2), そして、列番号は、指定した名前とマッチするSheet1(Book2)の列番号から、導き出そうとしています。 ところが、Matchで指定した範囲は、Indirect内の関数として認識されないようで、結果が得られません。 たとえば、 Book1のA1~E1にタイトルが入っています。(Index, Title, Book, Author, Frequency) Book2には、 シート1: InputName シート2: Output シート2に以下の関数を入れてみましたが、うまくいきません。 ちなみに、VLOOKUPの列番号を Match関数の代わりに、5 とすると、結果オーライですが、Book1 の列順が変わっていることがあるので、Matchを使ってエラーを避けたいのですが、以下の関数のどこを直すべきでしょうか? =IF(ISNA(VLOOKUP(C2,INDIRECT("'["&InputName!$A$2&"]"& InputName!$B$2&"'!"&"$A$2:$E$1400"),MATCH("Frequency",$A$2:$E$2,0),FALSE)),0,VLOOKUP(C2,INDIRECT("'["&InputName!$A$2&"]"& InputName!$B$2&"'!"&"$A$2:$E$1400"),MATCH("Frequency",$A$2:$E$2,0),FALSE)) よろしくお願いします。

  • index関数について

    はじめまして。 たとえば、A1からA10に1から10までの数字を入力するとして、A1に5を入力したらB1からB10までがすべて5を表示して、A2に7を入力したらB2からB10までが7を表示して、A3に4を入力したらB3からB10までが4を表示して、A3を入力した時、前に入力したB1B2の数字が消えないようなindex関数を作っていますが、なかなかできず悩んでいます。 このような式はindex関数ではなくて、他の関数を使うのでしょうか? もしご存知の方がおられましたら、よろしくお願いします。

専門家に質問してみよう