VBA有字典结构吗?比如key<>value array?
当前回答
你可以通过System.Collections.HashTable访问一个非本地哈希表。
哈希表
表示基于的键/值对的集合 键的哈希码。
不确定你会想要使用这个脚本。字典,但在这里添加为完整起见。你可以回顾这些方法,如果有一些感兴趣的,例如克隆,CopyTo
例子:
Option Explicit
Public Sub UsingHashTable()
Dim h As Object
Set h = CreateObject("System.Collections.HashTable")
h.Add "A", 1
' h.Add "A", 1 ''<< Will throw duplicate key error
h.Add "B", 2
h("B") = 2
Dim keys As mscorlib.IEnumerable 'Need to cast in order to enumerate 'https://stackoverflow.com/a/56705428/6241235
Set keys = h.keys
Dim k As Variant
For Each k In keys
Debug.Print k, h(k) 'outputs the key and its associated value
Next
End Sub
@MathieuGuindon的回答给出了很多关于HashTable的细节,以及为什么需要使用mscorlib。IEnumerable(早期绑定到mscorlib的引用),以便枚举键:值对。
其他回答
VBA没有字典的内部实现,但是在VBA中你仍然可以使用MS Scripting Runtime Library中的字典对象。
Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "aaa"
d.Add "b", "bbb"
d.Add "c", "ccc"
If d.Exists("c") Then
MsgBox d("c")
End If
如果由于任何原因,您不能或不想在Excel中安装额外的功能,您也可以使用数组,至少对于简单的问题。 你输入这个国家的名字,函数就会返回它的资本。
Sub arrays()
Dim WhatIsCapital As String, Country As Array, Capital As Array, Answer As String
WhatIsCapital = "Sweden"
Country = Array("UK", "Sweden", "Germany", "France")
Capital = Array("London", "Stockholm", "Berlin", "Paris")
For i = 0 To 10
If WhatIsCapital = Country(i) Then Answer = Capital(i)
Next i
Debug.Print Answer
End Sub
Yes.
设置对MS脚本运行时('Microsoft脚本运行时')的引用。根据@regjo的评论,转到工具->参考,并勾选“微软脚本运行时”。
使用下面的代码创建一个字典实例:
Set dict = CreateObject("Scripting.Dictionary")
or
Dim dict As New Scripting.Dictionary
使用示例:
If Not dict.Exists(key) Then
dict.Add key, value
End If
当你用完字典时,别忘了把它设置为Nothing。
Set dict = Nothing
所有其他人都已经提到了Dictionary类的scripting.runtime版本的使用。如果您无法使用此DLL,您也可以使用此版本,只需将其添加到代码中。
https://github.com/VBA-tools/VBA-Dictionary/blob/master/Dictionary.cls
它与微软的版本完全相同。
是的。适用于VB6, VBA (Excel), VB。网
推荐文章
- 实现嵌套字典的最佳方法是什么?
- .text, .value和.value2之间的区别是什么?
- 如何在字典理解中使用if/else ?
- LINQ组通过到一个字典对象
- 将[key1,val1,key2,val2]转换为字典?
- 如何在Python中直接获得字典键作为变量(而不是通过从值搜索)?
- 如何将字典保存到文件?
- 如何转换列表到地图在Kotlin?
- 'setdefault' dict方法用例
- 对象的自定义类型作为字典键
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- 使用字典字面量和字典构造函数之间有区别吗?
- 实现__hash__()的正确和好的方法是什么?
- 如何将JSON字符串转换为字典?
- Python创建一个列表字典