vba - 循环访问 EXCEL VBA 字典

标签 vba excel dictionary

我有一个包含以下数据的 VBA 字典:

ID       NAME       POSITION 
5008004  John Doe   00120096
5008002  John Doe2  00117886
5010010  John Doe3  00117886

我有一个包含以下单元格的 Excel 文档:

POSITION    SUPERVISOR_NAME
00117886    John Doe
00117886    John Doe2
00117886    John Doe3

当前的 Excel VBA 代码按以下方式循环遍历字典:

If SUPERVISOR_NAME <> "" Then
    For Each myKey In superDictionary.Keys
            If superDictionary(myKey) = SUPERVISOR_NAME Then
                SUPERVISOR_NAME = myKey
                Exit For
            End If
        Next
End If

无论如何,都会将 JOHN DOE 名称替换为其关联的 ID。

问题:如何用关联的 ID 替换 JOHN DOE 名称,但仅当 EXCEL 中的 POSITION 和 SUPERVISOR_NAME 与字典匹配时才有效,否则不提交任何内容。

最佳答案

您似乎没有正确利用 Scripting.Dictionary 最强大的功能之一目的;这就是它的快速检索能力。您本质上希望使用两列条件执行查找,因此使用两列作为您的 key ID 为 Item .

       dictionary_lookup

Option Explicit

Sub supervisorIDs()
    Dim d As Variant, dict As Object
    Dim v As Long, vVALs As Variant

    Set dict = CreateObject("Scripting.Dictionary")
    dict.comparemode = vbTextCompare  'default is vbbinarycompare

    With Worksheets("Sheet4")
        'get values from worksheet
        vVALs = .Range(.Cells(2, 1), .Cells(Rows.Count, 3).End(xlUp)).Value2
        'build dictionary
        For v = LBound(vVALs, 1) To UBound(vVALs, 1)
            'overwrite method - faster (no error control)
            'writes name&position as key, ID as item
            dict.Item(Join(Array(vVALs(v, 2), vVALs(v, 3)), ChrW(8203))) = vVALs(v, 1)
        Next v

        'loop through the second table
        For v = 2 To .Cells(Rows.Count, 6).End(xlUp).Row
            d = Join(Array(.Cells(v, 6).Value2, .Cells(v, 5).Value2), ChrW(8203))
            If dict.exists(d) Then _
                .Cells(v, 7) = dict.Item(d)
        Next v
    End With
End Sub

       dictionary_lookup_results

关于vba - 循环访问 EXCEL VBA 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843975/

相关文章:

python - 在 for 循环中迭代字典

ms-access - 如何在 Access 2007 中将窗体中的对象自动居中?

ms-access - MS Access 2013 仅显示启动表单,仅显示其他内容

excel - 是个 。在 .Cells 定义时是否需要在 .Range 中?

vba - 循环遍历每一列并删除具有 "0"的列

excel - Countifs 没有返回正确的值

python - 使用python删除字典内列表中的元素

javascript - 将 JSON 数据转换为 Excel 文件 在 Javascript 中下载

sql - excel ace.oledb vba 连接到 csv 只返回第一列

python - 在这种情况下如何使用Python中的过滤器来过滤字典?