具有动态数组的 VBA 字典

2024-02-21

我正在尝试创建包含动态数组的动态字典。

电子表格中的示例行:

Facility Name|Contact Name|Contact Role

设施和联系人之间的关系是M2M。我想重新创建一个如下所示的工作表:

Contact Name| Facility1 - role, Facility2 - role

我想做的是创建一个名称字典,以唯一名称作为键

New Dictionary  Names(name)

Names(name) 的值将是包含该名称出现的所有行号的数组。例如,假设“Joe Rose”出现在第 3、7 和 9 行:

names("Joe Rose") = [3,7,9]

我知道如何在 JS、Python、PHP 中做到这一点,但 VBA 让我发疯!

这是我到目前为止所得到的:

Dim names As Dictionary
Set names = New Dictionary

Dim name

For i=1 To WorkSheets("Sheet1").Rows.Count
  name = WorkSheets("Sheet1").Cells(i,2)
  If Not names(name) Then
    names(name) = i
  Else
    'help!
    'names(name)) push new i, maybe something with redim preserve?
  End If
Next i

即使只是向我指出一些我可以参考的文章也会很棒!来自 PHP 背景的 VBA 真是令人沮丧!

谢谢


这有点棘手,因为您必须将数组从字典中取出才能使用它,然后将其放回去:

Sub Tester()

    Dim names As Dictionary
    Set names = New Dictionary

    Dim name, tmp, ub, i, k

    For i = 1 To Worksheets("Sheet1").UsedRange.Rows.Count

        name = Trim(Worksheets("Sheet1").Cells(i, 2).Value)

        If Len(name) > 0 Then
            If Not names.Exists(name) Then
                names(name) = Array(i)
            Else
                tmp = names(name)
                ub = UBound(tmp) + 1
                ReDim Preserve tmp(0 To ub)
                tmp(ub) = i
                names(name) = tmp
            End If
        End If
    Next i

    For Each k In names.Keys
        Debug.Print k, Join(names(k), ",")
    Next k


End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有动态数组的 VBA 字典 的相关文章