VBA、MATCH関数は正しい値を返しません

date vba
VBA、MATCH関数は正しい値を返しません

VBAコードからMatch関数を呼び出すと問題が発生します。間違った値を返します。 私はこのようなスプレッドシートを持っています(例です):

        a               b       c                   d
1   testRange               testValue
2   01/01/2011 00:00        03/01/2011 00:00    testValue = A4
3   02/01/2011 00:00
4   03/01/2011 00:00        result from match function
5   04/01/2011 00:00        3                   testResult = MATCH(C2,A2:A20,1)
6   05/01/2011 00:00
7   06/01/2011 00:00        testResult
8   07/01/2011 00:00        9
9   08/01/2011 00:00
10  09/01/2011 00:00
11  10/01/2011 00:00
12  11/01/2011 00:00
13  12/01/2011 00:00
14  13/01/2011 00:00
15  14/01/2011 00:00
16  15/01/2011 00:00
17  16/01/2011 00:00
18  17/01/2011 00:00
19  18/01/2011 00:00
20  19/01/2011 00:00

私が探している範囲はA1:A20にあり、C2で書かれた値を探しています、あなたが見ることができるように範囲の値です(これは値が範囲内にあることを確認するためです) 。 スプレッドシートから呼び出された場合(セルC5)のように、Match関数が数値3を返すことを期待していますが、VBAで呼び出された関数は値9(セルC10)を返します。 私はこのコードを使いました:

Sub testMatch()
    testRange = Range("A2:A20")
    testValue = Range("C2")
    testResult = Application.WorksheetFunction.Match(testValue, testRange, 1)
    Range("C8") = testResult
End Sub

私はすでにtestValueをDateおよびDouble(他のフォーラムで提案されている解決策)としてキャストしようとしましたが、Dateでは同じ結果になり、Doubleではエラー1004 “WorksheetFunctionsクラスのMatchプロパティを取得できません”が表示されます

なにか提案を?

ありがとう

  2  0


ベストアンサー

他のフォーラムで提案されているように、変数(日付…​)を入力し、 `Option Explicit`を使用する必要があります。

この場合、エラーは `match`関数内の日付の使用に起因します。これを試してください:

Application.WorksheetFunction.Match(CLng(testValue), testRange, 0)

(編集>ソース:このhttp://www.mrexcel.com/forum/showthread.php?t=68318[thread]に感謝)

私はあなたの例でテストしましたが、それは私のために機能します。

よろしく、

Max

4


タイトルとURLをコピーしました