2011-06-29 35 views
2

VBAコードから一致関数を呼び出す際に問題があります。間違った値を返します。 は、私はこのようなspeadsheetを持っている(これは例です):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をキャストしようとしましたが、日付と私は同じ結果を持っているとダブルで、私はエラー1004を取得しますWorksheetFunctionsクラスのMatchプロパティを取得する "

何か提案がありますか?

おかげで他のフォーラムで提案されているように

+0

あなたがあなたのワークシートに使用されるよりも、あなたのVBAコードでの異なる検索範囲を使用している理由はありますか? – GSTD

+0

よろしくお願いします。範囲の参照を修正しました。例が作成されたためですが、問題はまだ残っています。 –

+0

人間が判読可能な日付形式のExcelではExcelがうまく再生されません。ルックアップ範囲とルックアップ値の形式が完全に同一でない場合、奇妙な結果が得られます。スプレッドシート上で同じように見えても、それらは異なる場合があります。たとえば、2011年1月3日と2011年3月1日は、セルの書式設定によって同じに見えます。 (日/月/年/月/日/年) – GSTD

答えて

4

、あなたの変数を入力する(日付...)とOption Explicitを使用する必要があります。私がテストしてみた

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

(このthreadのおかげで編集>元:)この場合

、エラーはこれを試して、match関数内の日付を使用することから来ていますあなたの例とそれは私のために働く。

よろしく、

マックス

+0

よろしくお願いします。 –

関連する問題