日時(日付と時刻)の検索・VBAのFindメゾットは注意

日付と時刻のデータを検索で対象データはあるはずなのに「検索対象が見つかりません。」の結果になることがあります。

検索データ

その場合は、オプションの設定を「値」にして検索します。

一般機能とマクロで実行する場合での説明です。

目次

エクセル一般機能の場合

「2021/12/1 4:00」を検索する場合の例です。

検索

オプション設定を変更していない場合の結果は、「検索対象が見つかりません。」とメッセージが表示されます。

メッセージ

検索できるようにする方法は、オプションの検索対象を「値」に変更します。

オプション
検索対象

VBAのFindメゾットによる日時検索は機能しない場合がある

はじめに、検索データに検索する値があるのに見つからない場合がある理由を説明をします。

次のデータは目視では同じです。

日付データ

違いは次の通りです。

データの違い
  • A列:直接入力
  • B列:1行上の値+Time関数
  • C列:1行上の値+”1:0:0"
  • D列:1行上の値+(1/24)

A列とB列の違いを比較すると、見た目は同じでも不一致です。

比較

シリアル値で比較すると違いがわかります。

シリアル値

VBAのサンプル・検索データと検索値のシリアル値が同じ場合

ここでの例は検索データと検索する値がシリアル値でみたとき同じ場合に機能します。

マクロで実行する場合は検索対象に該当する「LookIn」を「xlValues」に変更します。

パラメーター[LookIn]の引数

スクロールできます
名前説明
xlFormulas数式
xlValues
xlCommentsメモ
xlCommentsThreadedコメント
LookInの引数

「2021/12/1 4:00」を検索する場合の例です。

  • 検索結果あり:行番号を表示する
  • 検索結果なし:「該当なし」と表示

【サンプル】データ範囲固定・検索する値をコード内に入力

Sub smple()
    Dim rng As Range
    With ActiveSheet.Range("A1:A10")
        Set rng = .Find(what:="2021/12/1 4:00", LookIn:=xlValues)
        If Not rng Is Nothing Then
            Debug.Print rng.Row
        Else
            Debug.Print "該当なし"
        End If
    End With
End Sub

結果

イミディエイトウィンドウ

検索する値を指定するパラメーター「what」は省略可能

データ範囲自動取得・検索する値をシート内に指定

選択範囲はセルA1を含む範囲、検索する値はシートのセルD1に入力する場合の例です。

シート
Sub smple2()
    Dim rng As Range
    Dim kw As String: kw = Range("D1").Text
    With ActiveSheet.Range("A1").CurrentRegion
        Set rng = .Find(what:=kw, LookIn:=xlValues)
        If Not rng Is Nothing Then
            Debug.Print rng.Row
        Else
            Debug.Print "該当なし"
        End If
    End With
End Sub
目次