シートに3列と23393行を含む大きなファイルがあります。列Aは日付を参照し、列Bは整数を参照し、第3列は値を参照します。 複数の基準でセルの値(3列目)を探したいと思います。Excel VBA:複数の条件を持つセルの値を見つける方法
1)第一の基準は、日付(それは2008年1月1日から2009年12月31日に変更)
2)は、第2の基準は整数である(それは1から32まで変化する)
ありますおかげ
シートに3列と23393行を含む大きなファイルがあります。列Aは日付を参照し、列Bは整数を参照し、第3列は値を参照します。 複数の基準でセルの値(3列目)を探したいと思います。Excel VBA:複数の条件を持つセルの値を見つける方法
1)第一の基準は、日付(それは2008年1月1日から2009年12月31日に変更)
2)は、第2の基準は整数である(それは1から32まで変化する)
ありますおかげ
単純なアプローチはどうですか?
Function find(ByVal criteria1 As Date, ByVal criteria2 As Integer) As Variant
For i = 2 To 300001
If Cells(i, 1).Value = criteria1 Then
If Cells(i, 2).Value = criteria2 Then
find = Cells(i, 3).Value
Exit Function
End If
End If
Next i
find = "N/A"
End Function
あなたは、このような単純なマクロを実行していることをテストすることができます。
Sub storeFoundValues()
Dim matches(2) As Variant
Dim date1, date2 As Date
Dim int1, int2 As Integer
date1 = DateSerial(2015, 7, 15)
int1 = 3
matches(1) = find(date1, int1)
Cells(1, 5) = matches(1) ' test the output
date2 = DateSerial(2016, 1, 10)
int2 = 2
matches(2) = find(date2, int2)
Cells(1, 6) = matches(2) ' test the output
End Sub
これは30.000レコードを持つワークシートの秒未満を取りました。
ありがとうございます@carlossierra –
ちょうど質問、どのように私はループ内の日付を使用できますか?私のコードでは、日付をdd/mm/yyyyで、yyyy、mm、ddではないことを意味しています。何か解決策はありますか? –
日付がハードコードされている場合は、より安全です(ユーザーロケールに関係なく正しい結果を返すため)ので、私が従った方法を使用することをお勧めします。または、ワークシートのセルから直接日付を取得した場合、セル値を取得して関数に渡すことは安全だと思います。 – carlossierra
式 '= INDEX(H2:H23393、MATCH(DATEVALUE( "2008年1月1日")&F2、D2:D23393&F2:F23393,0))'その出力がIしたい値であるが、私はマクロでそれを実行し、数式の出力は配列に行きます。 –