7

Excel VBA で match() を機能させるのに問題があります。コードは次のとおりです。

x = Application.Match("Sep 2008", Range("F1:F1"), 0)

セル F1 の値は 2008 年 9 月 1 日です。

2008 年 9 月を 2008 年 9 月 1 日に変更しても、値は返されません。

それを修正する方法はありますか?

4

6 に答える 6

16

その理由Even if I changed Sep 2008 to 9/1/2008, it still doesn't return any value.

Excelに日付がある場合、Excelはその日付を自動的に数値に変換するためです。本当に検索したいのは次のとおりです。

39692

9/1/2008この数値は、1900 年 1 月 1 日のExcel の既定値との間の日数です。

Excel のすべての日付は、このような値で保存されます。したがって、これを処理する最も簡単な方法は、日付として表示されるものを、 を使用して Excel が日付として表示するものに変換することですCDate()

これだけでは、vba がプロパティを取得できないという役に立たないエラーが発生します。

これは、Lookup_value が値 (数値、テキスト、または論理値) であるか、数値、テキスト、または論理値へのセル参照である可能性があるためです。日付ではないので、単純に現在の日付の値を数値に変換して、次を使用してリスト内の一致する数値を検索します。CLng()

これを試してみると、検索の代替手段を使用するよりもはるかに高速になります。

x = WorksheetFunction.Match(CLng(CDate("Sep 2008")), Range("F1:F1"), 0)

これにより、期待される結果が得られるはずです

一致が見つからない場合に処理するには、次のサブを試してください。

Sub MatchDate()
Dim myvalue As Double
Dim LastRow As Long

LastRow = Cells(Rows.Count, "F").End(xlUp)

On Error GoTo NotFound
myvalue = WorksheetFunction.Match(CLng(CDate("Sep 2008")), Range("F1:F" & LastRow), 0)
MsgBox (myvalue)
End

NotFound:
MsgBox ("No Match Was Found")
End

End:
End Sub
于 2013-05-10T14:03:22.653 に答える
0

F1 の値は日付であると安全に想定できると思います。あなたのコードでは、「Sep 2008」は文字列です。データ型に一貫性がない限り、一致を成功させることはできません。日付を探している場合は、最初のパラメーターが日付であることを確認してください。

Dim dSearchSDate As Date

dSearchSDate = "01/Sept/2008"

x = Application.Match(dSearchSDate, Range("F1:F1"), 0)

別の可能なアプローチを次に示します。

Sub temp()
Dim x
Dim dSearchSDate As Date

    dSearchSDate = "01/Sept/2008"

    If ThisWorkbook.Worksheets(1).Range("F1:F1").Value = dSearchSDate Then
        Debug.Print "Found it!"
    Else
        Debug.Print "Doh!!"
    End If

End Sub
于 2013-05-10T13:34:09.980 に答える
0

この投稿が古いことは知っていますが、同じ問題があり、答えが見つかりました。

これを機能させるには、まず、Excel スプレッドシートに表示されるのと同じデータ形式を VBA に表示させる必要があります。

YourVar = Format("YourDate","mmm-yyyy") YourResult = Application.match(Clng(Cdate(YourVar)), YourRange, 0)

よろしく

ジル

于 2014-08-13T15:09:31.307 に答える