【Excel】MATCH関数でエラーが出る場合はデータ型に着目してみるといいかもしれない

2019年4月23日

皆さんこんにちは。行未です。

先日MATCH関数をいじっていると、エラーが出たので少しだけ実験してみたよっていう話です。

俗にいう「OFFSET+MATCH」をやっていた時にこの問題にぶち当たって頭を抱えました。

解決策としては結局のところ、タイトルにもある通り、

「データ型」がどうなっているか確認してみる

でした。

実験とはいいつつも、ぶっちゃけ備忘録みたいなもんです。

実験なんて言ったら本職の方に怒られますね。

実験

何を行うか

「見た目は同じでもデータ型が異なる値を用意して、行番号を取得しようとするとどうなるか」

を行います。

以下はエクセルのキャプチャ画面です。

MATCH関数キャプチャ画像

C列の2~3行目をご覧ください。見た目はどちらも同じ「1996年2月」ですが、E列を見るとデータ型が異なっていることが分かります。データ型の識別にはTYPE関数を用いています(D列)。

尚、「C2」セル内は厳密に言うと、「1996/2/1」が入力されていますが、セルの書式設定で「1996年2月」と表記されるようにしています。I列も同様です。

そして、「C2」セルのデータ型は「数値」、 「C3」セルのデータ型は「テキスト」です。

「C2」セルと「C3」セルの年月日の位置が若干異なる事(C2セルは右寄りですね)からも、「あ、こいつら一緒じゃないな」ていうのが何となく分かるかと思います。

次に、I列をご覧ください。年月がズラーッと並んでいます。これらのセルの書式は「日付」です。

次に、F列をご覧ください。F列は、「MATCH関数を用いて、I列とC列の値と一致する行番号を取り出している」というものです。(厳密に言うと、MATCH関数は行番号を取得する関数ではありません)

F2セルの数式も参考として画像に載せております。

実験結果

「C2」セルは無事行番号を取得できました、「C3」セルでは、検索値が見つからずエラーとなっています。

以上から、I列のデータ型は「数値」であるが故に、データ型が「数値」である「C2」セルでは行番号を取得できた一方、データ型が「文字列」である「C3」セルでは取得できなかったものと考えられます。

実際にI列のデータ型を確認してみると、データ型は「数値」であることが分かります。

実験画像1

日付データである「1996/2/1」のシリアル値は、「35096」です。

「C2」セルと「I15」セルを数値にしてみましょう。どちらも一致していることが分かります。

実験画像2

終わりに

今回は「数値」が一致するかで試しましたが、当時の私の解決策としては、検索する側、される側の両方を「文字列」へ変更していました。

なので、「数値」で検索する場合は検索される側も同様に「数値」、

「文字列」の場合も(ry

だと考えられます。

また、「C4」セルについては、純粋に結合するとどうなるかと思って入れています。

おまけ程度に見てください。

今回の内容をご覧になって、「ここ検証しろよボケナスが」みたいな意見があれば是非言っていただければと思います。

以上、現場からでした。

IT, ExcelIT, Excel, Tips

Posted by 行未