excel - 如何在 VBA Excel 中创建多列字典并从中获取数据
问题描述
我想将以下结构的字典表加载到数组(字典?UDT 类?),说“dictCompany”,CompanyName 是唯一键。
CompanyName | PersonName | PersonPhone
ABC Ltd | Nick | +12345
XYZ Co | Alice | +78901
然后我需要按 CompanyName 查找条目并引用其他列,如 dictCompany.PersonName 或 dictCompany.PersonPhone,类似于以下伪代码:
Dim i as Long
Dim dictIndex as Long
For i = 0 To UBound(dictCompany)
If dictCompany(i).CompanyName = "ABC Ltd" Then
dictIndex = i
End If
Next i
debug.print dictCompany(dictIndex).PersonName 'should get "Nick"
debug.print dictCompany(dictIndex).PersonPhone 'should get "+12345"
我不知道要使用什么技术 - 数组、字典、UDT 类或 VBA 具有的任何技术,所以我会很感激带有关键字的定向答案以进行进一步搜索。
解决方案
创建一个名为的类clsPerson
,并在您的类中放置以下内容:
Public PersonName as String, PersonPhone as String, CompanyName as String
然后在加载字典的模块中使用:
Option Explicit
Public Sub Demo()
Dim dictCompany As Object
Dim Emp As clsPerson
Dim i As Long
Set dictCompany = CreateObject("Scripting.Dictionary")
' Load Data into Dictionary
For i = 2 To 3
Set Emp = New clsPerson
Emp.CompanyName = Range("A" & i).Value2
Emp.PersonName = Range("B" & i).Value2
Emp.PersonPhone = Range("C" & i).Value2
If dictCompany.Exists(i) Then
Set dictCompany(i) = Emp
Else
dictCompany.Add i, Emp
End If
Next i
' Read back
For i = 2 To 3
If dictCompany(i).CompanyName = "ABC Ltd" Then
Debug.Print dictCompany(i).PersonName 'should get "Nick"
Debug.Print dictCompany(i).PersonPhone 'should get "+12345"
Exit For
End If
Next i
End Sub
您也可以对此进行扩展以使用公司名称作为您的密钥或使用集合而不是字典
推荐阅读
- javascript - 如何正确定位 JSON 响应以填充表
- python - 如何通过从一列中选择 NaN 值来创建数据框的子集?
- python - statsmodels 中的普通最小二乘:我们的模型需要截距
- git - Gitlab 上的错误合并分支
- python - 在 Ubuntu 19.04 上安装“pynusmv”时出现问题
- android - 如何在改造 2 android 中处理 API 响应中的空数组返回?
- java - 如何在jtable中选择整行?
- java - 如何在调试控制台而不是终端中运行代码
- cmake - 如何在 CLion 中加载一个整洁的项目
- django - Django-Admin 自定义 ImageField