gpt4 book ai didi

arrays - 带有动态数组的 VBA 字典

转载 作者:行者123 更新时间:2023-12-01 08:57:25 28 4
gpt4 key购买 nike

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

电子表格中的示例行:

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

关于arrays - 带有动态数组的 VBA 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26390638/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com