これは「Excel Advent Calendar 2025」の18日目です
https://adventar.org/calendars/11326
前置き
本記事では
【blank】を「未入力の状態」と定義します。
【空文字】を「文字長0の文字列("")」と定義します。
1. 「=MATCH("",A2:A6,0)」じゃダメなの?
1.1. 疑問
「MATCH関数でblankにマッチしたい」
その方法は検索すればすぐに出てきます。
よく紹介されているのは
=MATCH(TRUE,INDEX(A2:A6="",0),0) や、
{=MATCH(TRUE,A2:A6="",0)} という数式です。
で、みんな思うのは
「=MATCH("",A2:A6,0)じゃダメなの?」 です。
そんなわけで調査しました。
1.2. 結論
まず公式サイトでMATCH関数の仕様を検索。
検査値には、値 (数値、文字列、または論理値)、またはこれらの値に対するセル参照を指定できます。
とのこと。つまり、
「blankは数値でも文字列でも論理値でもないので、検索値に指定できない」
これが答えだと思います。
掲題の=MATCH("",A2:A6,0)だと、
第1引数「""」は空文字として扱われ、空文字にマッチします。blankにはマッチしません。
ちなみに=MATCH(,A2:A6,0)だと、
第1引数「」は数値「0」として扱われ、「0」にマッチします。blankにはマッチしません。
今回やりたいことを敢えて表現するなら
=MATCH(blank,A2:A6,0)が正しいと思います。
しかし、上述の通りblankは検索値に指定できませんし、
そもそもExcelではblankを扱うことができないので表現不可です。
2. blankと""
2.1. なぜ=MATCH("",A2:A6,0)と考えてしまうのか
MATCH関数でblankにマッチしたい時、
なぜ=MATCH("",A2:A6,0)と考えてしまうのか。
それは、A1が未入力でも=A1=""の計算結果がTRUEになるからです。
これが原因で「blank≣""」という思考になるのはごく自然だと思います。

しかし、blankと空文字は別の存在です。
A2に空文字が入力されているとき
=A2=""の計算結果はTRUEになりますが、
=ISBLANK(A2)の計算結果はFALSEになります。

2.2. なぜ=blank=""がTRUEになるのか
推測になりますが、
A1が未入力のとき=A1=""の計算結果がTRUEになるのは(VBA的に表現すると)
= Range("A1").Value = ""
という処理をしているからだと思います。
=blank=""ではなく=""=""という処理をしているので、計算結果がTRUEになります。
2.3. なぜ=blank=0がTRUEになるのか
ちなみに=A1=0の計算結果もTRUEになります。
またまた推測になりますが(VBA的に表現すると)
= val(Range("A1")) = 0
という処理をしているからだと思います。
=blank=0ではなく=0=0という処理をしているので、計算結果がTRUEになります。
3. blankにマッチするには?
3.1. {=MATCH(TRUE,A2:A6="",0)}を使う
先述の=blank=""から=""=""へのすり替えを利用したのが、まさしく
冒頭に出てきた {=MATCH(TRUE,A2:A6="",0)} という数式です。
A2:A6=""の部分で、各セルに対して
= Range(参照).Value = ""
を行なっています。(あくまで推測です)
これにより、=blank=""は=""=""にすり替えられ、
結果的に「TRUE/FALSE」の配列に置換されます。
検索値に論理値「TRUE」を指定することで、blankの位置にマッチできます。
「MATCH関数でblankにマッチできる」というのは厳密には誤りで、
正確には「MATCH関数でblankの位置にマッチできる」が正しいです。
この方法ではblankの位置にも空文字の位置にもマッチします。
3.2. {=MATCH(TRUE,ISBLANK(A2:A6),0)}を使う
すり替えうんぬんの話が面倒くさければ、
{=MATCH(TRUE,ISBLANK(A2:A6),0)} のほうが分かりやすいかと思います。
blankならTRUE、それ以外は全てFALSEです。
この方法ではblankの位置にはマッチしますが、空文字の位置にはマッチしません。
3.3. いろいろ試してみた
例1

{=MATCH(TRUE,ISBLANK($B$2:$B$8),0)}の計算結果は「6」になります。
ISBLANKを使用すると空文字にはマッチせず、blankにマッチします。
例2

=MATCH("",$B$2:$B$8,0)の計算結果は「6」になります。
検索値に「""」を指定すると、blankにはマッチせず空文字にマッチします。
{=MATCH(TRUE,$B$2:$B$8="",0)}と
{=MATCH(TRUE,$B$2:$B$8=0,0)}の計算結果は「4」になります。
blankを計算式に通してあげると、文字列として空文字、数値としては「0」として扱われます。
まとめ
・MATCH関数の検索値にblankは指定できない。
・blankと空文字は違う。
・と言いつつ、blankは空文字としても「0」としても扱われる。
・MATCH関数でblankにはマッチできないけど、blankの位置にはマッチできる。
※blankと空文字の違いについては、こちらの記事が分かりやすいです。



