Index,Match関数恐怖症に(Match編)

昨日の続き。

MATCH

 指定された照合の型に従って検査範囲内を検索し、検査値と一致する要素の、配列内での相対的な位置を表す数値を返します。検査値で指定したセルに含まれる値ではなく、検査値の範囲内での位置を調べる場合は、その他の検索/行列関数の代わりに、MATCH 関数を利用してください。

書式

MATCH(検査値,検査範囲,照合の型 )

  • 検査値
     表の中で必要な項目を検索するために使用する値を指定します。
    • 検査値には、実際に検索する値ではなく、検査範囲の中で照合する値を指定します。たとえば、電話番号帳を使ってある人の電話番号を調べるとき、検査値としてその人の氏名を指定しますが、実際に検索するのは電話番号です。
    • 検査値には、数値、文字列、論理値、またはこれらの値に対するセル参照を指定できます。
  • 検査範囲
     検査値を含む隣接したセル範囲を指定します。検査範囲は、配列または配列に対するセル参照を指定してもかまいません。
  • 照合の型
     -1、0、1 の数値のいずれかを指定します。照合の型には、検査範囲の中で検査値を探す方法を指定します。
    • 照合の型に 1 を指定すると、検査値以下の最大の値が検索されます。このとき検査範囲のデータは、昇順に並べ替えておく必要があります。昇順の並べ替えでは、数値は 1 〜 9、アルファベットは A 〜 Z、かなは "あ" 〜 "ん"、ブール型の値は FALSE から TRUE に配置されます。
    • 照合の型に 0 を指定すると、検査値に一致する値のみが検索の対象となります。このとき検査範囲を並べ替えておく必要はありません。
    • 照合の型に -1 を指定すると、検査値以上の最小の値が検索されます。このとき検査範囲のデータは、降順に並べ替えておく必要があります。降順の並べ替えでは、数値は 9 〜 1、アルファベットは Z 〜 A、かなは "ん" 〜 "あ"、ブール型の値は TRUE から FALSE に配置されます。
    • 照合の型を省略すると、1 を指定したと見なされます。
解説
  • MATCH 関数では、指定したセルに含まれている値ではなく、検査範囲内にある検査値に一致する値の位置が返されます。たとえば、MATCH("b",{"a","b","c"},0) は 2 を返します。これは、配列 {"a","b","c"} の中での "b" の相対位置を表します。
  • MATCH 関数では、英字の大文字と小文字は区別されません。
  • 検査値が見つからない場合は、エラー値 #N/A が返されます。
  • 照合の型に 0 を指定し、検査値が文字列の場合、検査値の中で、アスタリスク (*)、疑問符 (?) のワイルドカード文字を使うことができます。ワイルドカード文字のアスタリスクは任意の文字列を表し、疑問符は任意の 1 文字を表します。
使用例
  A B
1 製品 個数
2 バナナ  25
3 オレンジ  38
4 リンゴ  40
5 ナシ  41
  1. =MATCH(39,B2:B5,1)
    • B2:B5 のセル範囲から 39 を検索しますが、一致する値がないため、この値以下の最大の値 38 の位置が返されます (2)
  2. =MATCH(41,B2:B5,0)
    • B2:B5 のセル範囲から 41 の位置を調べます (4)
  3. =MATCH(40,B2:B5,-1)
    • B2:B5 のセル範囲は降順に並べ替えられていない ため、エラーが返されます (#N/A)



ヘルプでは、一応、理解できるのだが...

練習問題


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

  1. セル範囲B3:C8の表を参照して、セルC11に指定した「居住者名」の「号数」をセルD11に求めなさい。
    • 考察
      • セルB3:B8の号数は連番になっているが、「連番になっている」とは書いていないので、これを考慮する必要があろう...
    • 解答
      • =INDEX(B3:C8,MATCH(C11,C3:C8,0),1)
        • Match関数で“3”という答えは得られるが、考察にあるような前提が無いので、“3号室”が正解であろう。
        • しかし、セルE11には“号室”とあるので‥‥ この辺は、出題者の意向が判らないので不明。
  2. セル範囲G3:K4の表を参照して、セルH7に指定した「管理人」の担当「棟」をせるI7に求めなさい。
    • 考察
      • 上記とおなじで、棟の番号は「連番になっている」とは記されていない。
    • 解答
      • =INDEX(G3:K4,1,MATCH(H7,H4:K4,0)+1)