在VBA中,我创建了一个名为C的Collection
,如下所示:
Key Item
Thing1 12
Thing2 15
Thing4 7
Thing6 3
在我的Excel文件中,Sheet1如下所示:
A B
Thing1
Thing2
Thing3
Thing4
Thing5
Thing6
我想查看C中的每个Key,搜索A列,如果找到则将Item放在B列中。结果将是:
A B
Thing1 12
Thing2 15
Thing3
Thing4 7
Thing5
Thing6 3
我最初认为我会通过循环收集,获取密钥,在“A:A”中搜索匹配,然后将“B#”设置为Item值来做到这一点。只是不确定语法。阅读更多内容后,我认为无法访问Key
值。
Dim Count as Integer
Dim ItemToFind as String
Dim i as Integer
For Count = 1 to C.Count
ItemToFind = C.Key(count) 'I don't think C.Key is a valid thing
for i = 1 to 50 'there are less than 50 rows in Sheet1 to look thru
If Cells("A" & i).Value = ItemToFind Then
Cells("B" & i).Value = C.Key(count)
End If
Next i
Next Count
我想也许我需要创建一个新的Class
而不是Collection
?任何帮助将不胜感激!
编辑:我正在尝试使用Dictionary
对象。我能够向Dictionary添加内容并能够检索Key,但在检查Excel单元格值= Dictionary Key时是否会出现运行时错误。
我有一个名为“dict”的词典,并用以下词加载了键和值:
dict.Add Key:=Thing, Item:=TotalThings
我正在使用此代码循环通过Dictionary项,并查看它们是否存在于工作表的A列中:
Dim Count as Integer
Dim KeyToFind as String
Dim i as Integer
For Count = 1 to dict.Count
KeyToFind = dict.Keys(count)
For i = 1 To 50
If oExcel.Worksheets(1).Cells("A" & i).Value = KeyToFind Then
oExcel.Worksheets(1).Cells("B" & i).Value = dict.Item(Count)
End If
Next i
Next Count
On If oExcel.Worksheets(1).Cells("A" & i).Value = KeyToFind Then
我收到运行时错误1004:应用程序定义错误或对象定义错误。如果我在调试模式下将鼠标悬停在KeyToFind上,它确实包含字典中的第一个键。
答案 0 :(得分:3)
我认为您通过从集合切换到字典来做出明智的选择。字典有一个.Exists
方法,应该是有用的。请考虑这个片段。
Dim dct As Object
Set dct = CreateObject("Scripting.Dictionary")
dct.Add "Thing1", 12
dct.Add "Thing2", 15
dct.Add "Thing4", 7
dct.Add "Thing6", 3
Debug.Print dct.Exists("BogusThing") ' returns False
然后您可以对工作表中的每列A值使用dct.Exists
...如果该键存在于字典中,则将匹配值存储到B列。
这可能不完全正确,但希望它足够接近让你开始。
Const lngRows As Long = 50
Dim objSheet As Object
Dim strKey As String
Set objSheet = oExcel.Worksheets(1) ' you know where oExcel comes from
Dim i As Long
For i = 1 To lngRows
'strKey = objSheet.Cells("A" & i).value ' oops
strKey = objSheet.Cells(i, 1).value
If dct.Exists(strKey) Then
'objSheet.Cells("B" & i).value = dct(strKey) ' oops again
objSheet.Cells(i, 2).value = dct(strKey)
End If
Next i