3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MATCH関数でblankにマッチしたいとき、「=MATCH("",A2:A6,0)」じゃダメなの?

Last updated at Posted at 2025-12-15

これは「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関数の仕様を検索。

image.png

検査値には、値 (数値、文字列、または論理値)、またはこれらの値に対するセル参照を指定できます。

とのこと。つまり、
「blankは数値でも文字列でも論理値でもないので、検索値に指定できない」
これが答えだと思います。

例1
image.png

例2
image.png

掲題の=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≣""」という思考になるのはごく自然だと思います。
image.png

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

2.2. なぜ=blank=""がTRUEになるのか

推測になりますが、
A1が未入力のとき=A1=""の計算結果がTRUEになるのは(VBA的に表現すると)

= Range("A1").Value = ""

という処理をしているからだと思います。
=blank=""ではなく=""=""という処理をしているので、計算結果がTRUEになります。

2.3. なぜ=blank=0がTRUEになるのか

image.png

ちなみに=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
image.png
{=MATCH(TRUE,ISBLANK($B$2:$B$8),0)}の計算結果は「6」になります。
ISBLANKを使用すると空文字にはマッチせず、blankにマッチします。

例2
image.png
=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と空文字の違いについては、こちらの記事が分かりやすいです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?