ExcelマクロのRange.Find()にハマる
Excelで、ある日付が別シート上の休日テーブルに登録されているかを検索しようとして、
Dim day As Date day = .Cells(2, 1) ... Dim fc As Range Set fc = .Worksheets("sheet2").Range("A1").CurrentRegion.Find(day) If Not fc Is Nothing Then '登録されている場合 ...
みたいなマクロを書いたのですが、なぜか"2015/1/7"が"2015/11/17"に一致するという結果に。
(それ以外にも"2015/2/26"が"2015/12/26"に一致する)
なんで?と丸一日コードをこねくり回したのですが、なんのことはない、
Set fc = .Worksheets("sheet2").Range("A1").CurrentRegion.Find(what:=day, LookAt:=xlWhole)
のように"LookAt:=xlWhole"で「完全一致」を明示しないと「部分一致」になってしまうためでした。
(正確には、明示しないと直前の検索条件を引き継ぐ)