まりふのひと

Index,Match関数恐怖症に

YSC で行われている「情報OA基礎科」のアシスタントに行っているが、今日は Index関数、Match関数を立て続けに質問され、ついに恐怖症に陥った。
帰宅し、恐怖が薄らいだ時点で Excel2003 のヘルプを読んだ。

INDEX 書式 1
 行番号と列番号で指定されるテーブルまたは配列の要素の値を返します。
INDEX 関数には、セル範囲形式と配列形式の 2 種類があります。セル範囲形式の INDEX 関数は指定されたセルの参照を返し、配列形式の INDEX 関数は値または値の配列を返します。INDEX 関数の 1 番目の引数が配列定数のときは、配列形式を使います。

書式 1

配列形式
INDEX(配列,行番号,列番号 )

  • 配列
     セル範囲または配列定数を指定します。
    • 配列が 1 行または 1 列のみの場合、それぞれ行番号または列番号を省略することができます。
    • 配列が複数行および複数列で構成され、行番号または列番号のどちらか一方しか指定されていない場合、配列の中にある行または列全体の配列が返されます。
  • 行番号
     配列の中にあり、値を返す行を数値で指定します。行番号を省略した場合は、必ず列番号を指定する必要があります。
  • 列番号
     配列の中にあり、値を返す列を数値で指定します。列番号を省略した場合は、必ず行番号を指定する必要があります。
解説
  • 行番号と列番号の両方が使用されている場合は、行番号と列番号が交差する位置にあるセルの値が返されます。
  • 行番号または列番号に 0 を指定すると、それぞれ列全体または行全体の値の配列が返されます。配列として返される値を利用するには、INDEX 関数を配列数式として横方向のセル範囲に入力するか、縦方向のセル範囲に入力します。配列数式を入力するときは、Ctrl + Shift + Enter キーを押します。
  • 行番号と列番号には、配列内のセルを指定します。配列の範囲外のセルを指定すると、エラー値 #REF! が返されます。

練習問題


右図のような表があります。
次の設問に答えなさい。

  1. セルC3に、B3の数値を基に出発地を求めなさい。(列の縦を出発地とする)
    • 考察
      • VLookupは‥‥ 使えない。なぜならば、検索するキーが“1”だからだ。
      • 何となく、Index を使わないとだめだ‥‥ と言うことが解らないと、この問題は解けない。
      • 例えば、子どもと大人の出発地が‥‥ 今回は同じであるが、違う可能性もある...
    • 解答
      • 一般的には、=INDEX(B10:B14,B3,1) であろう。
      • 子どもと大人で出発地が違うのであれば、=INDEX((B10:B14,I10:I14),B3,1,I3) となる。この方が正解であろう。
         ( ) が無いとエラーになる。
  2. セルF3に、E3の数値を基に到着地を求めなさい。(横の行を到着地とする)
    • 考察
      • 設問1と考え方は同じ。
    • 解答
      • 上記理由で大正解は、=INDEX((C9:G9,J9:N9),1,E3,I3)であろう。
  3. セルJ3に、I3の数値を基に区分を求めなさい。
    • 考察
      • これは VLookup で出来る。
    • 解答
      • =VLOOKUP(I3,B18:C19,2,0)
  4. セルB6に、出発・到着・区分のデータに合致する料金を求めなさい。
    • 考察
      • 「区分」が“2”なので、子どもの料金。
      • 出発が行の「駅前」、到着が列の「平和通」なので、答えは 150円であろう...
    • 解答
      • =INDEX((C10:G14,J10:N14),B3,E3,I3)
        • 領域が複数ある場合、( )で括らないとエラーになる。