【发布时间】:2017-09-21 05:52:33
【问题描述】:
我是 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 代码”的语法以添加字典条目而不使用“i”或直接调整上面的代码以包含 IF 语句以检查列 J 中的值(并且仅在 J = 100 时为当前正在评估的行创建一个条目。
如果上面的代码不清楚,键将在 G 列中,项目将在 I 列中。(我稍后查找 G 列并检索 I 列的值。)
正如我所说,我是新手,所以我很感激任何帮助!
干杯!
【问题讨论】:
-
也许用
rngrow.Row - 1替换i -
啊!我曾建议
rngrow.Row - 1的替代方案,然后将其删除,因为我认为单元格位于不同的工作表上,但现在意识到它们不是。所以,我会再次建议 - 你可以使用rngrow.Cells(1, 1).Value代替x(i, 1)和rngrow.Cells(1, 3).Value代替x2(i, 1)。 -
@YowE3K 感谢这两个解决方案,
rngrow.row-1替换i有效——您下面的解决方案也有效,我认为更透明,所以我将其应用于我的代码。
标签: excel dictionary syntax vba