Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays VLookup风格的数据结构 问题:_Arrays_Vba_Excel_Dictionary_Collections - Fatal编程技术网

Arrays VLookup风格的数据结构 问题:

Arrays VLookup风格的数据结构 问题:,arrays,vba,excel,dictionary,collections,Arrays,Vba,Excel,Dictionary,Collections,我正在VBA中寻找一种高效的数据结构,它允许我在一个“列”中查找一个值,并在另一列中查找相应的值。所有列都具有相同的固定长度 背景 基本上,我有2个枚举,每个枚举有n个项和n个字符串数组;我想从这些集合中传递第I个值,然后从另一个指定集合返回第I个值 一个选项是数组的集合;集合将具有与列表类型相对应的键(例如,Enum1,Enum2,StringList),我将能够生成一个函数,该函数将两个列表键和一个查找值作为参数,并在第二列中使用循环返回相应的值: Function findCorrespo

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

背景 基本上,我有2个
枚举
,每个枚举有n个项和n个字符串数组;我想从这些集合中传递第I个值,然后从另一个指定集合返回第I个值

一个选项是
数组的
集合
;集合将具有与列表类型相对应的键(例如,
Enum1
Enum2
StringList
),我将能够生成一个函数,该函数将两个列表键和一个查找值作为参数,并在第二列中使用循环返回相应的值:

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
当然,我可以用未设置关键字的集合替换查找数组,以避免循环。但这似乎不是最有效的方法(我相信
字典
散列而不是循环,因此在这方面会更快,但与数组相比会有很多额外的负担)

我真正想要的是类似于
脚本.Dictionary
的东西,在这里您可以访问
,并使用其中一个来获取另一个。但第三个参数可以使用其他两个参数中的任何一个来找到,并且可以用于找到其他两个参数中的任何一个


如果某项扩展到n列,这也会很有用,如果我理解正确,那么当我有多个值要为一个关键项存储时,我会使用
脚本.Dictionary
,对于该值,我只是使用
(管道)作为分隔符连接这些值。然后我可以很容易地使用
Split
来检索我正在查找的信息。听起来你有很多想法-你有没有尝试过任何不符合你要求的方法?你说你在寻找一种“有效”的方法-你有具体的限制吗?@braX使用脚本的优势。字典是,如果你有一条信息(关键),你可以非常有效地获得另一条信息(值)。但与集合不同的是,您还可以使用该值来查找键(无可否认,循环)。我希望这三条信息,以便我可以使用任何一条来查找其他两条信息中的一条(最好没有循环)。回到你的例子;我可以在字典里储存3位信息,没错。但是我不能很容易地使用一个分隔值来查找相应的键或它附加到的另一个值。请使用多个
脚本。字典
?同时创建多个类是很简单的,对吗?这没有内置结构-如果您希望它“整洁”,那么您可以将您的需求构建到一个类中,并在主代码中使用它。