2

在 VBA 中,我创建了一个Collection名为 C,如下所示:

Key      Item
Thing1   12
Thing2   15
Thing4   7
Thing6   3

在我的 Excel 文件中,Sheet1 如下所示:

A        B
Thing1
Thing2
Thing3
Thing4
Thing5
Thing6

我想查看 C 中的每个键,搜索 A 列,如果找到,将项目放入 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对象。我能够将内容添加到字典并能够检索键,但是在检查 Excel 单元格值是否 = 字典键时会出现运行时错误。

我有一个名为“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

If oExcel.Worksheets(1).Cells("A" & i).Value = KeyToFind Then我收到运行时错误 1004:应用程序定义或对象定义错误。如果我在调试模式下将鼠标悬停在 KeyToFind 上,它确实包含字典中的第一个键。

4

1 回答 1

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

然后您可以使用dct.Exists工作表中的每一列 A 值...如果该键存在于字典中,则将匹配值存储到 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
于 2013-04-25T16:10:07.260 回答