VLookup样式数据结构

时间:2017-12-14 20:11:15

标签: arrays vba excel-vba dictionary collections

问题:

我在VBA中寻找一种高效的数据结构,它允许我在一个“列”中查找值并在另一列中找到相应的值。所有列都具有相同的固定长度。

背景

基本上我有2个Enums,每个都有 n 项,还有一个 n 字符串数组;我想从任何这些集合中传递i th 值,并从另一个指定集合中返回i th

一个选项是Collection Arrays; Collection将具有与列表类型相对应的键(例如Enum1Enum2StringList),并且我将能够创建一个带有两个列表键和查找值的函数作为参数,并使用循环返回第二列中的相应值:

Function findCorresponding(dataTable As Collection, header1 As String, header2 As String, lookupVal As Variant) As Variant

Set array1= dataTable(header1) 'pick out array from collection
For i = Lbound(array1) To Ubound(array1) 'loop through to find lookup val
    If array1(i) = lookupVal Then Exit For
Next i
findCorresponding = dataTable(header2)(i) 'return corresponding val
End Function

当然,我可以用非键控集合替换查找数组,以避免循环。但这似乎不是最有效的方式(我相信dictionaries哈希而不是循环,所以在这方面会更快,但与阵列相比有更多额外的包袱)

我真正想要的是Scripting.Dictionary,您可以访问valueskeys,并使用一个来获取另一个。但是使用其他两个中的任何一个都可以找到第三个参数,并且可以用来查找其他两个中的任何一个。

如果某些内容扩展到 n 列也很有用

0 个答案:

没有答案