2017-09-20 31 views
0

我是VBA詞典的新手。我想要做的是評估一張表的每一行。如果J列中的值是「100」,那麼我想在字典中創建一個鍵/項目條目。如果J列中有任何其他值,我不希望創建條目並讓宏查看下一行數據。創建符合條件的VBA字典條目

目前,我有下面的代碼:

Dim x, x2, y, y2() 
Dim i As Long 
Dim dict As Object 
Dim LastRowTwo As Long, shtOrders As Worksheet, shtReport As Worksheet 

Set shtOrders = Worksheets("Orders") 
Set shtReport = Worksheets("Mapping") 
Set dict = CreateObject("Scripting.Dictionary") 

With shtReport 
    LastRow = .Range("G" & Rows.Count).End(xlUp).Row 
    x = .Range("G2:G" & LastRow).Value 
    x2 = .Range("I2:I" & LastRow).Value 

    Set SelectionRNG = Worksheets("Mapping").Range("G2:J" & LastRow) 

For Each rngrow In SelectionRNG.Rows 

If rngrow.Cells(1, 4) = "100" Then 
dict.Item(x(i, 1)) = x2(i, 1) 

End If  
Next 
    End With 

我知道這行:

dict.Item(x(i, 1)) = x2(i, 1) 

是我的問題。我已經使用這種語法在下面的代碼,它工作正常:

For i = 1 To UBound(x, 1) 
    dict.Item(x(i, 1)) = x2(i, 1) 
    Next i 

我被困在如何改變任我「rngrow代碼」語法添加字典條目,而不使用「I」或直接調整上面的代碼以包含一個IF語句來檢查J列中的值(並且只在J = 100時爲當前正在評估的行創建一個條目)

如果上面的代碼不清楚,在列G中,該項目將在列I.(我後來查找列G並檢索列I的值。)

正如我所說,我是新來的,所以我appre提供任何幫助!

乾杯!

+0

也許代替'和'rngrow.Row i' - 1' – YowE3K

+1

哎呀!我曾建議'rngrow.Row - 1'的替代方法,然後將其刪除,因爲我認爲這些單元格位於不同的工作表上,但現在意識到它們不是。因此,我會再次提出建議 - 您可以使用'rngrow.Cells(1,1).Value'而不是'x(i,1)'和'rngrow.Cells(1,3).Value'來代替' x2(i,1)'。 – YowE3K

+0

@ YowE3K感謝這兩種解決方案,'rngrow.row-1'取代'i'的作品 - 您的解決方案也適用,我認爲它更加透明,所以我將它應用於我的代碼。 – RugsKid

回答

2

我就會通過排掉rngrow,只是循環2至LastRow

Dim i As Long 
Dim dict As Object 
Dim LastRow As Long, shtReport As Worksheet 

Set shtReport = Worksheets("Mapping") 
Set dict = CreateObject("Scripting.Dictionary") 

With shtReport 
    LastRow = .Range("G" & .Rows.Count).End(xlUp).Row 

    For i = 2 To LastRow 
     If .Cells(i, "J") = "100" Then 
      dict.Item(.Cells(i, "G").Value) = .Cells(i, "I").Value 
     End If 
    Next 
End With