INDEX関数で2列からの参照は?

このQ&Aのポイント
  • INDEX関数を使用して、2つの列から参照する方法について教えてください。
  • 表1の料金表を使用して、表2の料金を求める方法について教えてください。
  • INDEX関数を使用すれば、2列からの参照も可能です。また、SUMPRODUCT関数も利用できます。
回答を見る
  • ベストアンサー

INDEX関数で2列からの参照は?

INDEX関数で2列からの参照は? 表1 料金表 A列 B列 C列 D列             着地  北海道 関東 関西  発地 サイズ名 発/着地番号  1   2  3  北海道 60S   1 500 1,200 1,500 北海道 80S   2 700 1,500 1,750 北海道 100S  3 1,000 1,750 1,900 関東  60S   4 750 500 800 関東  80S   5 950 700 1,000 関東  100S  6 1,100 800 1,300 関西  60S   7 1,500 800 500 関西  80S   8 1,750 1,000 750 関西  100S  9 1,900 1,300 900 上の表を使って、下の表の料金を求めます。 表2 A列  B列  C列  D列  E列 氏名 発地  着地 サイズ 料金 あ  北海道 関西 60S い  関東  北海道 80S う  関西  関東 80S え  関東  関西 100S このような場合、料金を求めるには、INDEX関数でいいと思うのですが、2列を参照しないといけないので、どのように式を作ればいいでしょうか? SUMPRODUCT関数を使えばいいですか? どなたか教えて下さい。よろしくお願いします。

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

  • ベストアンサー
  • sige1701
  • ベストアンサー率28% (74/260)
回答No.1

A B C D E F 1 着地 北海道 関東 関西 2 発地 サイズ名 発/着地番号 1 2 3 3 北海道 60S 1 500 1,200 1,500 4 北海道 80S 2 700 1,500 1,750 5 北海道 100S 3 1,000 1,750 1,900 6 関東 60S 4 750 500 800 7 関東 80S 5 950 700 1,000 8 関東 100S 6 1,100 800 1,300 9 関西 60S 7 1,500 800 500 10 関西 80S 8 1,750 1,000 750 11 関西 100S 9 1,900 1,300 900 12 ・ ・ 19 20 氏名 発地 着地 サイズ 料金 21 あ 北海道 関西 60S 1500 22 い 関東 北海道 80S 950 23 う 関西 関東 80S 1000 24 え 関東 関西 100S 1300 E2=INDEX($D$3:$F$11,MATCH(B21&D21,INDEX($A$3:$A$11&$B$3:$B$11,),0),MATCH(C21,$D$1:$F$1,)) とか E2=INDEX($D$3:$F$11,SUMPRODUCT(($A$3:$A$11=B21)*($B$3:$B$11=D21),$C$3:$C$11),MATCH(C21,$D$1:$F$1,))

yo-mas
質問者

お礼

できました! 発着地番号はなぜここに存在するのかがよく分からなかったのですが、 納得しました。 勉強になりました。 ありがとうございました。

その他の回答 (5)

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

2列にそれぞれ該当するものを見つけ出すためには、MatchやVKOOUP関数を使うためには、 2列のデータを結合した、新しい列を作るのが考えやすいし、それしかない。式を複雑になるのを覚悟で、それでも良いという場合は、既出回答に出ているかもしれないので、この回答は当たらないが。 ーーー 例データ A1:H10 -は空白セル。本当は見出しが入るのかも。 質問のデータの右列に8の3000を追加。 第1行の「8」の列は、画面に収まるようにH列に持ってきたが、E列から8番目の列に本当は来る。 - - - - 1 2 3 8 北海道 60S 北海道60S 1 500 1,200 1,500 3000 北海道 80S 北海道80S 2 700 1,500 1,750 北海道 100S 北海道100S 3 1,000 1,750 1,900 関東 60S 関東 60S 4 750 500 800 関東 80S 関東 80S 5 950 700 1,000 関東 100S 関東 100S 6 1,100 800 1,300 関西 60S 関西 60S 7 1,500 800 500 関西 80S 関西 80S 8 1,750 1,000 750 関西 100S 関西 100S 9 1,900 1,300 900 仮に固定行第15行に条件を入れるとする。A15:C15 北海道 関西 60S 北海道+60s,関西+60sの2つをそれぞれ定桁結合をするため D15に =REPLACE(REPLACE("    ",1,LEN(A15),A15),4,LEN(C15),C15) E15に =REPLACE(REPLACE("    ",1,LEN(B15),B15),4,LEN(C15),C15) "   ”部分だが北海道などが、最長3文字なら全角スペース3文字+半角スペース適当数(100sの4桁が最長なら4スペース)結合したものを関数の第1引数に入れる。 本件ではストレートに文字列結合してもOKのような気がするが。 F15は =MATCH($D$15,$C$1:$C$100,0) は発地区の表上の行的位置 G15は =MATCH($E$15,$C$1:$C$100,0) は着地区の表上の行的位置 H15は =MATCH(G15,$E$1:$X$1,0) 着地区のコード(D列のコードを引いた) X1のxは実際には列の広がり具合で、適当に修正してください。 I15 ここで最終的に、表引きのINDEX関数を使える状態になって =INDEX($E$1:$X$14,F15,MATCH(G15,$E$1:$X$1,0)) X14も実際にあわせて適当に変えてください。 ーーーー 結果は第15行はA-I列は 北海道 関西 60S 北海道60S 関西 60S 2 8 4 3000 このように中間結果を可視化しておくのも(冗長ではあるが)いい点もあると思う。

yo-mas
質問者

お礼

そうですよね。 作業列を作るのがわかりやすいのですが、今回は使えなかったので・・・ 今回はA No.1さんの回答を使わせていただきました。 今後の参考にさせていただきます。 本当にありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

回答No4です。 作業列を作らない場合には別のシートのE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTA(B2:D2)<>3,"",INDEX(Sheet1!D:F,SUMPRODUCT((Sheet1!A1:A1000=B2)*(Sheet1!B1:B1000=D2)*ROW(A1:A1000)),MATCH(C2,Sheet1!D$1:F$1,0)))

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

表1がシート1に有るとして、発地の北海道はA3セル、60SはB3セル、C3セルは1、D1セルには北海道、E1セルには関東、F1セルには関西などと入力されているとします。 北海道と60Sのある行を選んでから着地の関東などを選ぶことになりますので、作業列を作って対応することが最もわかりやすく処理速度も速いですね。 例えばH3セルには次の式を入力して下方にオートフィルドラッグします。 =A3&B3 表2は別のシートに作るとしてA1セルには氏名、B1セルには発地、C1セルには着地、D1セルにはサイズ、E1セルには料金の項目名があるとします。 E2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTA(B2:D2)<>3,"",INDEX(Sheet1!$D:$F,MATCH(B2&D2,Sheet1!$H:$H,0),MATCH(C2,Sheet1!$D$1:$F$1,0)))

yo-mas
質問者

お礼

そうですよね。作業列が使えれば少しは分かりやすいと思うのですが、 作業列は使えなかったので・・・ 今回はA No.1さんの回答を使わせていただきました。 今後の参考にさせていただきます。 本当にありがとうございました。

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

どこでもいいですが例えば  B20に発地  C20に着地  D20にサイズ がそれぞれあるのを検索してみるとして。 たとえばINDEX関数を使うなら,判りやすく分けて説明すると 縦の発地番号は60s,80s,100sの規則正しい繰り返しですから,  縦番号 =MATCH(B20,A:A,0)+MATCH(D20,$B$3:$B$5,0)-3 横の着地番号は北海道関東関西の検索値ですから  横番号 =MATCH(C20,$D$1:$F$1,0) するとINDEX(範囲,縦,横)ですから =IF(COUNTA(B20:D20)=3,INDEX($D$3:$F$11,MATCH(B20,A:A,0)+MATCH(D20,$B$3:$B$5,0)-3,MATCH(C20,$D$1:$F$1,0)),"") など。 もしSUMPRODUCT関数を使ってみたいなら =IF(COUNTA(B20:D20)=3,SUMPRODUCT(($A$3:$A$11=B20)*($B$3:$B$11=D20)*$D$3:$F$11*($D$1:$F$1=C20)),"") などでも,この程度の数表なら問題なく計算できます。 あるいは60s,80s,100sの3行×横列を1組と考えてINDEXやVLOOKUP/HLOOKUPを使い,何番目の組を検索すればいいのかをOFFSET関数などで切り替えて与えるような方法もありますね。 =VLOOKUP(D20, OFFSET($B$3:$F$5,MATCH(B20,A:A,0)-3,0), MATCH(C20,$B$2:$F$2,0))

yo-mas
質問者

お礼

今回はA No.1さんの回答を使わせていただきました。 今後の参考にさせていただきます。 本当にありがとうございました。

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

こんばんは! 外していたらごめんなさい。 料金の列だけで良いのですかね? もしそうであれば、↓の画像のA~C列は手入力もしくは他の入力方法になるという前提です。 ↓の画像でSheet2のE2セルに =IF(COUNTBLANK(A2:D2),"",INDEX(Sheet1!$D$3:$F$11,SUMPRODUCT((Sheet1!$A$3:$A$11=B2)*(Sheet1!$B$3:$B$11=D2)*ROW($A$1:$A$9)),MATCH(C2,Sheet1!$D$1:$F$1,0))) という数式を入れ、オートフィルで下へコピーしています。 Sheet1の「発/着地番号」の意味が良く判らないので 的外れなら読み流してくださいね。m(__)m

yo-mas
質問者

お礼

今回はA No.1さんの回答を使わせていただきました。 今後の参考にさせていただきます。 本当にありがとうございました。

関連するQ&A

  • INDEX関数について

    他の人の質問で回答がありましたが、少し私に分からないところがありました。表には、24や33,19,77などの数字があり、この表から偶数の数と奇数の数を求める関数なのですが、 こう回答がありました。 その1 奇数の数 =COUNT(INDEX(0/(MOD(A1:D4,2)=1),)) この関数で奇数の数が求められるそうですが、このINDEX(0/がよく分かりません。INDEX(範囲、行番号、列番号)ですが、 この関数式を詳しく説明してほしいのです。 よろしくお願いします。 偶数は、全体から奇数の数を引くということでいいのですが、

  • 2つの条件から1個のデータを導き出す関数が分かりません。

    excelで売上集計表を作っているのですが、関数が分からなくて困っています。VLOOKUPやDSUMなどは知っているのですが、2つの条件から1個のデータ抽出する方法が分かりません。 (例)サイズ+色 → 該当する値段  など 【列】カラー 【行】サイズ → 【交わるセル】値段 という表(1)が参照元として有ります。 その参照表とは別に表(2)として、【A列】には購入者を【B列】カラー 【C列】サイズ と入力していく管理表で【D列】に同じ行の「カラー」と「サイズ」を参照して、別表(1)の価格を自動表示できるような関数を入力したいのです。このようなケースの場合どのような関数を入力すればよいのでしょうか。

  • INDEX関数を使用した関数の意味を教えてください。

    INDEX(sheet2!C:C,SMALL(INDEX((sheet2!$B$1:$B$100<>$B$18)*10^4+ROW($1:$100),),ROW(A1)))&"" sheet2にある表のB列に検索時に使用する文字列があり、sheet1のB18にその検索したい文字列を入力すると、一致したB列と同じ行のC列のデータを抽出する式です。 表のデータは今後も増加しますが、どの程度増加するは不明です。 INDEX関数やSMALL関数など一つ一つの関数の意味はわかっているつもりですが、なぜ上記のセルが選択されているのかわかりません。 特にSMALLの後の式がわかりません。 エクセル関数にはあまり詳しくないので、この式の意味をできれば詳しく教えていただけないでしょうか? (式の意味は人から聞いたものですが、違っていたらすいません)

  • エクセルのINDEX関数で

    ワークシート関数でINDEXがありますが、使用方法について教えてください。 C7からE7にリストがある場合、 =INDEX($C$7:$E$7,0) のように、引数に対象外の位置を置いた場合、関数を入れるセルにより答えが変わります。 C列なら1番目、D列なら2番目、E列なら3番目が返ります。それ以外の列に置けばエラー値です。 そもそも0という範囲外の値をいれてもエラー値以外が返ること自体が不思議です。 ご教示いただけると幸いです。

  • セルを参照させる関数について

    C列には関数で返ってきている値が入っています。(たとえば単純にC1のセルには=SUM(A1:B1)と入っている)そのままC1を横にドラッグしてコピーするとD1のセルには単純に=SUM(B1:C1)となりますが、見に行くセルをC2に、E1のセルの参照するセルはC3を。。。という風に参照させるにはどんな関数を使用すればいいのでしょうか? (単純にD1のセルに=C2と設定はしたくないのが前提です)

  • Excel 関数 列内の文字を参照し隣列の値を返す

    Excel2003です。 関数を使ってみたのですが、思うようにいきません。 C列を参照し、「みかん」という言葉があれば、そのセルの隣の列の値(D列の「B」)を、A1に表示したいです。 最初は、VLOOKUP関数を使えばいいと思っていましたが、「検索値」というものがはっきりしない為、使用できない?のでしょうか? 「みかん」という単語を探し出すには「COUNTIF」でしょうが、その関数では、直接その値を返すのみなので、何かの関数と組み合わせるのか、それとももっと良い関数があるのでしょうか? なお、C列に「みかん」という単語は一度しか登場しない為、列内に複数「みかん」が存在している場合にの対処法は、不要です。単純に、「みかん」の値の2列目だけをA1セルに表示させたいのです。

  • こちらの関数式を考えて下さい (IF関数)

    運送会社の料金表を作っています。 お客様のデータと共に運送料も入力しています。 そこで、重さと距離を入力すれば、運送料金が出るような関数を教えていただきたいと思います。 画像を参照ください。 入力するデータに重さ85 距離125を入れるとC2に参照データの1500が自動的に入る関数です。 参照するデータは重さ85の場合80以上100以下なので13行を、距離125は100以上200以下なのでE列を見て、E13の1500が該当します。よって入力するデータのC2は1500の数値が入ります。 同様に重さ45 距離70 ではD11の900が入ります。 C2欄に1500が、C3の欄に900が自動的に入る関数を教えてください。 よろしくお願いいたします。     

  • COLUMN関数でよいでしょうか?

    (Sheet1表1) A列 B列 C列・・・ 空欄 ポスター ハガキ ・・・ 写真 \20 \10 イラスト \15 \2 (Sheet2表2) A列 B列 C列 D列 使用者 コード 用途 用途料金 ウシ 11111 ポスター カメ 22222 ハガキ (Sheet3表3) A列 B列 コード カテゴリ 11111 イラスト 12345 イラスト 22222 写真 23456 イラスト 上記の表があり、Sheet2表2のD列の用途料金を求めたいです。 表1からもってくればいいのは分かります。 ただその表1の参照の仕方が分かりません。 カテゴリ(写真等)はVLOOKUPを使って表3を見に行けばいいのでしょうが、そこから用途(ポスター等)を探して金額を表示させるにはどうしたらいいですか?COLUMN関数なら列番号を返すのでいいかなと思ったのですが、引数に関数は使えるのでしょうか? 他にいい方法があるようでしたら教えて下さい。 よろしくお願いします!

  • 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関数以外でも結構です)

  • excelの関数をしえてください。

    こんにちは。exceldでの関数で質問です。 使用関数と検索範囲の指定の方法を教えてください。 表は2つあります。 表1は行タイトルがクラス名(A~D)、列タイトルに1~25までの級を表す数字の入った表です。参照表です。  A B C D 1 ○ ◇ ■ △ 2 △ ○ ◇ ■ (内容はすべて違うものです) 3 ■ △ ◇ ○ 4 5 表2は関数を利用して表1より該当するセルの内容を 表示したいのです。 表2 A列にクラス(A~D 表1と同じ項目) B列に級 C列に数値 D列に前年度数値  クラス 級 数値 前数値 A 2 △ △ C   5 ○   ○  B 1 D 3 C列にはD列の前数値の近似値を表1より参照したいのです。その際にクラスわけからAであれば表1の Aクラスの列から近似値をさがしたいのです。 B列にはC列で求めた近似値が表1でどの級かを 求めたいのです。 表2のクラスわけがランダムなのと、 検索範囲がクラスによって異なる箇所となるので 検索範囲の指定の方法、さらにはどの関数を 使用して行えばよいのかわかりません。 説明がわかりづらいかと思いますが、 宜しくお願いします。 OS:NT4.0 excel2000 を使用しています。

専門家に質問してみよう