昨日の続き。
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 |
- =MATCH(39,B2:B5,1)
- B2:B5 のセル範囲から 39 を検索しますが、一致する値がないため、この値以下の最大の値 38 の位置が返されます (2)
- =MATCH(41,B2:B5,0)
- B2:B5 のセル範囲から 41 の位置を調べます (4)
- =MATCH(40,B2:B5,-1)
- B2:B5 のセル範囲は降順に並べ替えられていない ため、エラーが返されます (#N/A)
ヘルプでは、一応、理解できるのだが...
練習問題
- セル範囲B3:C8の表を参照して、セルC11に指定した「居住者名」の「号数」をセルD11に求めなさい。
- 考察
- セルB3:B8の号数は連番になっているが、「連番になっている」とは書いていないので、これを考慮する必要があろう...
- 解答
- =INDEX(B3:C8,MATCH(C11,C3:C8,0),1)
- Match関数で“3”という答えは得られるが、考察にあるような前提が無いので、“3号室”が正解であろう。
- しかし、セルE11には“号室”とあるので‥‥ この辺は、出題者の意向が判らないので不明。
- =INDEX(B3:C8,MATCH(C11,C3:C8,0),1)
- 考察
- セル範囲G3:K4の表を参照して、セルH7に指定した「管理人」の担当「棟」をせるI7に求めなさい。
- 考察
- 上記とおなじで、棟の番号は「連番になっている」とは記されていない。
- 解答
- =INDEX(G3:K4,1,MATCH(H7,H4:K4,0)+1)
- 考察