Home > Excel VBA Macro 値の操作 > FAQ

Match関数で検索する日付を変数で指定するとエラーになるが?

Question 74.7 Excel VBA Borad (掲示板)より Previous Next
こんばんは。度々質問してばかりですみません。
Sheet(1)の7行目に連続して1ヶ月分の日付が入力してあります。

変数で指定された日付が何列目に入っているか調べるために、下記のようにMatch関数を利用しているのですが、エラー値が戻ってきます。

列 = Application.Match(dtm基準日, Range("Sheets(1)!7:7"), 0) 'dtm基準日・・・調べたい日がyyyy/m/dで指定
Match関数の時は、セルの値を一旦数値などに変換してからじゃないと駄目でしょうか?
Answer   2004.12.7 もてもて
変数にしたら(2)バグりましたが、セル指定(1)ならOKでした。
何故バグるのか、誰か教えてください。 Stringで試してもダメでした。
Sub test()
Dim dt As Date
    Cells.NumberFormatLocal = "yyyy/m/d"
    For i = 1 To 5
        Cells(7, i).Value = DateValue("2004/12/10") + i
    Next i
    With Cells(1, 1)
        .Value = DateValue("2004/12/12")
        dt = .Value
    End With
    MsgBox Application.Match(Cells(1, 1), Rows(7), 0)   '----(1)
    MsgBox Application.Match(dt, Rows(7), 0)            '----(2)
End Sub
データ型を変えてみれば long
変数のデータ型を Doubleに、倍精度浮動小数点型の小数点の左側の値が日付、右側が時刻かと。
つまり、
Dim dt As DateDim dt As Double に変えれば OKと思います。
ありがとうございました
もてもてです。まだ未熟者です。他人の質問を解決して、自分の勉強にしています。
勉強になりました。 ありがとうございます。

もてもてさん、longさん、返事が遅くなって申し訳ありません。 データ型 Double で解決しました。
お世話になりました。 ありがとうございました。

 

Excel VBA Macro

Excel DownLoad