日付と時刻のデータを検索で対象データはあるはずなのに「検索対象が見つかりません。」の結果になることがあります。
その場合は、オプションの設定を「値」にして検索します。
一般機能とマクロで実行する場合での説明です。
目次
エクセル一般機能の場合
「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 | コメント |
「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