エクセルで日付型データをVlookupしたところ、#N/A表示、そんなはずは無いと繰り返すも無限ループへ、日付型データは表示されないだけで後ろに時分秒がしっかり存在しているのを忘れてはまったので対策を備忘録としてまとめます。
はまった処理のあらまし
稼働日カレンダとして日付と一緒に稼働日=1、休暇日=0の稼働サインが並んでいる表があります。
生産の実績日付から稼働日カレンダをVlookupして稼働サインを検索したところ #N/A の表示
計算式は間違えるはずのないシンプルなものなのでかなりはまってしまいました。
日付型データには時分秒が含まれる
生産の実績日付はNow()を使って登録するので年月日時分秒のデータとなっています。
よって年月日のデータと突き合わせてもイコールが成り立たないのが原因でした。
違うものをイコールで評価するので False になるのは当然ですね・・・。
表示形式で yyyy/mm/dd の表示にしていたのでまったく気が付きませんでした。
日付型データにTrunc()で時分秒を削除する
エクセルで1を日付型表示にすると1900/1/1となります。日付型データは整数部で日付を小数点以下で時分秒を表しています。よって小数点以下を切り捨てれば日付だけのデータになります。
日付型データがセルB2にあるとすると =Trunc(B2) で日付だけのデータを計算します。
カレンダーのデータに”カレンダ”と名前を付け、2列目の稼働サインをセルB2の値で検索すると
=Vlookup(Trunc(B2),カレンダ,2,false)
でしっかり検索してくれました。
日付が1900/1/1以降であれば、Int() や Rounddown()でも同じ結果になります。
この記事へのコメントはありません。