0
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?

More than 1 year has passed since last update.

Excelの検索クライテリア、とくにチルダ(~)と仲良くしよう

Last updated at Posted at 2023-10-25

最近お仕事中にハマった問題からの投稿です。
前回と同じくちまちました話題で恐縮です。

Problem

Excelで VLOOKUPCOUNTIFMAXIFSなど、「マッチする値を検索して◯◯する」系関数を利用する時、どういうわけか「現にそこに存在するのに検索にヒットしない、結果◯◯してもらえない」あるいは逆に「ヒットしないと思っていたものがヒットして、結果◯◯されてしまう」という問題がたまに起きます。

Solution

ワイルドカードと関数の特性を理解しましょう。

まず、ワイルドカードです。
Microsoftのサポートページにも案内がある通り、Excel内で検索をするときにはワイルドカード ?* そしてそれらを非ワイルドカードとして利用するためのエスケープ文字 ~ が使用できます。
恥ずかしながら私は今回始めてこのページを見ました:

image.png

その上で、関数の特性も重要です。
正確に言うと、ワイルドカードの解釈を巡って、関数ごとに挙動が異なるという点の理解が重要です。

ここでは、CONTIF(範囲, 検索条件)VLOOKUP(検索値, 範囲, 列番号, [検索方法])を比較してみます。
?*の基本的なマッチングについては違いはありません。

  • smithsmyth に対して、クライテリア sm?th はマッチします。
  • EastSoutheastに対して、クライテリア *east はマッチします。
  • fy06? には fy06~?が、 fy06*にはfy06~*が、それぞれマッチします。

以上の点で、2つの関数でマッチの成否に違いはありません。

では 値 ~?fy06 に対して、クライテリア ~?fy06はどうでしょうか?
COUNTIF()VLOOKUP() もマッチしません。
?~によってエスケープされ、ワイルドカードではなくただの文字として扱われることになるので、想定通りの結果です。

ではさらに 値 ~~fy06 に対して、クライテリア ~~fy06はどうでしょうか?
COUNTIF()マッチします が、 VLOOKUP() はマッチしません。
おや?となりますよね。

これと値 ~fy06 に対して、クライテリア ~~fy06はどうでしょうか?
COUNTIF()マッチしません が、 VLOOKUP() はマッチします。
この通り、 ~~をエスケープするクライテリアを COUNTIF()はサポートしていない ようです。

加えて、
~fy06 に対して、クライテリア ~fy06 は、COUNTIF() はマッチ、 VLOOKUP() は非マッチ。
fy06 に対して、クライテリア ~fy06 は、COUNTIF() は非マッチ、 VLOOKUP()マッチ
つまり、VLOOKUP()~~~というエスケープに加えて、 ~(非ワイルドカード)(非ワイルドカード) というエスケープ(?)もサポート している。

これは重大な違いです。
このような違いがなぜあるのかわかりませんが、値の中に ~ が含まれる場合、使用する関数によってマッチしたりマッチしなかったりするということです。

検索クライテリアを使用する関数は多数ありますが、それらを利用する場合、「ワイルドカードを使うつもりがあるかないか」に関わらず、ワイルドカードとそのエスケープシーケンスに要注意(意図せずマッチに失敗する可能性)ということです。

0
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
0
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?