日付と時刻を配列で探す方法です。
検索結果はの値の行番号を表示します。
目次
サンプルコード
検索データを文字列で格納し、検索値はdata型で宣言しますがテキスト扱いします。
検索データ数指定の場合
For~Next文の開始と終了の値を直接指定する例です。
Sub smple1() Dim kw As Date: kw = Range("D1").Text Dim rng(10) As String Dim i As Long, j As Long For i = 1 To 10 rng(i) = Cells(i, 1) Next i For j = LBound(rng) + 1 To UBound(rng) If rng(j) = kw Then Debug.Print j Exit Sub End If Next j Debug.Print "該当なし" End Sub
説明
- 2行目:変数はdata型
- 6~8行目:検索データを配列に文字列として格納します。
配列は0から始まりますが、わかりやすくするために1からはじめます。 - 10行目:配列を1から格納しているので「LBound(rng) + 1」
行目を「Dim kw As string: kw = Range("D1").Text」にした場合は検索できません。変数kwは2021/12/1・・・と日が1桁だが、検索データの日は「01」と2桁です。
検索データを変数で指定する場合
For~Next文の開始と終了の値を変数で指定する方法です。
Sub smple2() Dim kw As Date: kw = Range("D1").Text Dim rng() As String Dim n As Long n = WorksheetFunction.CountA(Range("A:A")) ReDim rng(n) Dim i As Long, j As Long For i = 1 To n rng(i) = Cells(i, 1) Next i For j = LBound(rng) + 1 To UBound(rng) If rng(j) = kw Then Debug.Print j Exit Sub End If Next j Debug.Print "該当なし" End Sub
説明
- 3行目:配列の要素数を指定しません
- 4~5行目:A列のデータ個数を調べます
- 6行目:配列の要素数をしていします
14行目の「LBound(rng) + 1 To UBound(rng)」は「1 To n」でも同じ結果です。
検索データに検索値があるのに見つからない例
データは日時なのでdate型の変数を使うと検索できない例です。
失敗する理由:日時(日付と時刻)の検索・VBAのFindメゾットは注意
Sub smple3() Dim kw As Date: kw = Range("D1") Dim rng() As Variant rng = Range("A1").CurrentRegion Dim i As Long For i = LBound(rng, 1) To UBound(rng, 1) If rng(i, 1) = kw Then Debug.Print i Exit Sub End If Next i Debug.Print "該当なし" End Sub
4行目:Range("A1").CurrentRegionで一気に要素を代入します。
ローカルウィンドウで確認した画面です。検索データと検索値の両方ともdata型です。
時刻の「0:00:00」の検索
時刻が「0:00:00」の時の検索を確認すると、変数kwの値も「0:00:00」の表示です。
上記リンク先は配列についてです。