2019/08/27 追記
この記事は、正しくない前提で動かした挙動について語っていた事がコメントによりわかりました。
なので、読む意味はほぼないと思います。
見つけた経緯
たまたまexcelで関数使っていろいろやっていたら偶然見つけた
そもそもMATCH関数とは
Microsoftさんいわく、
MATCH 関数は、範囲 のセルの範囲で指定した項目を検索し、その範囲内の項目の相対的な位置を返します。たとえば、範囲 A1:A3 に値 5、25、38 が含まれている場合、数式「=MATCH(25,A1:A3,0)」を入力すると、範囲内では 25 が 2 番目の項目であるため、数字 2 が返されます。
(MATCH関数 https://support.office.com/ja-jp/article/match-%E9%96%A2%E6%95%B0-e8dffd45-c762-47d6-bf89-533f4a37673a より引用)
つまり、ある範囲の中で、どこに探したい値があるかを調べる関数。
MATCH関数の使い方
MATCH関数は、
MATCH(検索したい値,検索したい範囲,照合の型)
というふうに記述し、
引数 | 説明 |
---|---|
検索したい値 | そのまんま。数字とか文字列とか |
検索したい範囲 | これもそのまんま。ただし、行や列を指定する場合は、一行または一列まで。(帰ってくる値がその行とか列の何番目かを示すから、二次元だと困ってしまう) |
照合の型 | これだけ別枠で説明 |
照合の型とは
Microsoftさんいわく、
省略可能です。-1、0、1 の数値のいずれかを指定します。照合の型には、検査範囲の中で検査値を探す方法を指定します。この引数の既定値は 1 です。
(引用元は先程示したリンクと同じです)
これが書かれているページのすぐ下にそれぞれの値の詳しい話が載っているので詳しくはそこを見てもらって、
重要な点を抜き出すと、
引数 | 説明 |
---|---|
-1 | 検索したい値より小さい、最大の値 |
0 | 完全一致 |
1 | 検索したい値より大きい、最小の値 |
こんな感じ。
真実 (2019/08/27 追記)
コメントの方で、自分の理解に間違いがあることがわかりました。
引数 | 説明 |
---|---|
-1 | 検索したい値以下の最大の値を探す。昇順前提 |
0 | 完全一致 |
1 | 検索したい値以上の最小の値を探す。降順前提 |
#今回見つけたケース
ここまでは長いけど、前置き。
本題はここからで、
例えば、下のような表があったとする
B | |
---|---|
1 | ID |
2 | 15 |
3 | 12 |
4 | 13 |
5 | 14 |
6 | 14 |
7 | 15 |
8 | 18 |
9 | 15 |
10 | 15 |
このとき、
MATCH(12,$B$2:$B$10,-1)
MATCH(12,$B$2:$B$10,0)
MATCH(12,$B$2:$B$10,1)
は、それぞれ「2、2、2」を返す。1
この挙動は正しく2、とくに問題はない。
では、次の動作はどうなるか
MATCH(15,$B$2:$B$10,-1)
MATCH(15,$B$2:$B$10,0)
MATCH(15,$B$2:$B$10,1)
自分が予想していたものは、上から「1、1、1」もしくは「1、6、9」を返すというもの。
実際は、上から「1、1、6」を返すというものだった。
どういうことなの...
結果だけ見ると、それぞれ「一番始め、一番始め、二番目の場所」を示している。
なんでそうなった???
ということで、誰か詳しい方いたら教えてください。。。
@Keisuke0 さんのコメントで解決しました。ありがとうございました。
余談、というか続き
これを一桁のみの値、つまり、
B | |
---|---|
1 | ID |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 4 |
6 | 1 |
7 | 5 |
8 | 1 |
みたいな感じでやって、
MATCH(1,$B$2:$B$10,-1)
MATCH(1,$B$2:$B$10,0)
MATCH(1,$B$2:$B$10,1)
これを見てみたら、上から「1、1、1」だった...
これもうわかんねぇな...