Googleからこのルックアップvbaが見つかりました。私はいくつかの変更を行いました。 しかし、私は同じタスクのコーディングを複製する問題を解決する方法を理解するのが難しいです(下記を参照してください) 私の目的は、一度に一つの値を検索し、倍数の値を返すことです。 以下は私のステップのいくつかされていますVBAのVlookup機能の繰り返しタスクがある
生データテーブル(データ分析)はC8からO399
にあるルックアップ値はA172するA5からのものであり、戻り結果がにT5に配置されますT172
は、その後、私はわずかに異なる列
I明確再び生データと検査ステップ1におけるコード及び2を複製することにより、ルックアップ次再び繰り返す(シート名「グラフ」で) I399へのC8からテーブル(データ分析) - *第一段階とは異なる列
ルックアップ値A172と、結果を返すために、A5からあるV172にV5に配置されたが(シート名で「グラフ」)
- 私は(約15の値の周りの)すべての複数の戻りをルックアップし終えるまで、私は再び1と2を繰り返す
列とテーブルの値があるように、私はループにこれを置くために苦労していますルックアップごとに変更されます。
生データのルックアップテーブルの2つの列は、すべてのルックアップタスクのみを許可します(これは特定の列を探すために必要なvkloopとは異なります)。 追加したい点は、数千行に上って、私はこのコードが店舗用の "コレクション"を使用しているのを見ています。私はこれが何のためにわからない。
は、以下のコードどれが大幅に高く評価されるのに役立ちます
Sub VLookupValues(lookupCategory As Range, lookupValues As Range, vlookupCol As Object)
Dim i As Long, resArr() As Variant
ReDim resArr(lookupCategory.Rows.Count, 1)
For i = 1 To lookupCategory.Rows.Count
resArr(i - 1, 0) = vlookupCol.Item(CStr(lookupCategory(i)))
Next i
lookupValues = resArr
End Sub
です。おかげさまで
Sub TestVBA()
OptimizeVBA True
Dim startTime As Single, endTime As Single
startTime = Timer
Dim testnames As Range, testvalues As Range
Dim lookupTestNames As Range, lookupTestValues As Range
Dim vlookupCol As Object
Set testnames = Worksheets("Data Analysis").Range("C8:C399")
Set testvalues = Worksheets("Data Analysis").Range("O8:O399")
Set lookupTestNames = Worksheets("Graph").Range("A5:A172")
Set lookupTestValues = Worksheets("Graph").Range("T5:T172")
'Set testvalues = Worksheets("Data Analysis").Range("I8:I" & 399)
'Set lookupTestNames = Worksheets("Graph").Range("A5:A172")
'Set lookupTestValues = Worksheets("Graph").Range("U5:U172")
'Build Collection
Set vlookupCol = BuildLookupCollection(testnames, testvalues)
'Lookup the values
'VLookupValues lookupTestNames, lookupTestValues, vlookupCol
VLookupValues lookupTestNames, lookupTestValues, vlookupCol
endTime = Timer
Debug.Print (endTime - startTime) & " seconds have passed [VBA]"
OptimizeVBA False
Set vlookupCol = Nothing
'For Lower Test Spec****************************************************************
Set testnames = Worksheets("Data Analysis").Range("C8:C" & 399)
Set testvalues = Worksheets("Data Analysis").Range("I8:I" & 399)
Set lookupTestNames = Worksheets("Graph").Range("A5:A172")
Set lookupTestValues = Worksheets("Graph").Range("U5:U172")
'Build Collection
Set vlookupCol = BuildLookupCollection(testnames, testvalues)
'Lookup the values
VLookupValues lookupTestNames, lookupTestValues, vlookupCol
endTime = Timer
Debug.Print (endTime - startTime) & " seconds have passed [VBA]"
OptimizeVBA False
Set vlookupCol = Nothing
'For Upper Test Spec****************************************************************
Set testnames = Worksheets("Data Analysis").Range("C8:C" & 399)
Set testvalues = Worksheets("Data Analysis").Range("J8:J" & 399)
Set lookupTestNames = Worksheets("Graph").Range("A5:A172")
Set lookupTestValues = Worksheets("Graph").Range("V5:V172")
'Build Collection
Set vlookupCol = BuildLookupCollection(testnames, testvalues)
'Lookup the values
VLookupValues lookupTestNames, lookupTestValues, vlookupCol
endTime = Timer
Debug.Print (endTime - startTime) & " seconds have passed [VBA]"
OptimizeVBA False
Set vlookupCol = Nothing
'BuildLookupCollection'は何ですか? –
ルックアップ値と戻り値の順序がない場合は、ルックアップ列と戻り値列の配列を作成してみる必要があります。したがって、各ループで必要な列を検索して必要な列を返すことができます。 –