符合标准时创建VBA字典条目

时间:2017-09-20 21:41:26

标签: excel-vba dictionary syntax vba excel

我是VBA词典的新手。我想要做的是评估工作表的每一行。如果列J中的值是" 100",那么我想在字典中创建一个键/项条目。如果列J中有任何其他值,我不希望创建该条目,并且宏不希望查看下一行数据。

我目前有以下代码:

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代码的语法#34;添加字典条目而不使用" i"或者直接在上面调整代码以包含一个IF语句来检查J列中的值(如果当前正在评估的行的J = 100,则只创建一个条目。

如果上面的代码不清楚,则密钥将在G列中,该项目将在第I列中。(我稍后查找G列并检索第I列的值。)

正如我所说,我是新手,所以我感谢任何帮助!

干杯!

1 个答案:

答案 0 :(得分: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