【Excel】MATCH関数でエラーが出る場合はデータ型に着目してみるといいかもしれない
皆さんこんにちは。行未です。
先日MATCH関数をいじっていると、エラーが出たので少しだけ実験してみたよっていう話です。
俗にいう「OFFSET+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列のデータ型を確認してみると、データ型は「数値」であることが分かります。

日付データである「1996/2/1」のシリアル値は、「35096」です。
「C2」セルと「I15」セルを数値にしてみましょう。どちらも一致していることが分かります。

終わりに
今回は「数値」が一致するかで試しましたが、当時の私の解決策としては、検索する側、される側の両方を「文字列」へ変更していました。
なので、「数値」で検索する場合は検索される側も同様に「数値」、
「文字列」の場合も(ry
だと考えられます。
また、「C4」セルについては、純粋に結合するとどうなるかと思って入れています。
おまけ程度に見てください。
今回の内容をご覧になって、「ここ検証しろよボケナスが」みたいな意見があれば是非言っていただければと思います。
以上、現場からでした。
ディスカッション
コメント一覧
まだ、コメントがありません