VBA在二维数组的“列”中查找值

我以前是通过在电子表格中循环一列来dynamic构build一维数组。 因为我只想要这个数组中唯一的值,所以我打电话

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean. IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 

在每个元素添加之前。 到现在为止还挺好。

现在我需要存储2列的元素,所以我需要将其扩展为2D数组。 我只需要原始的数据元素是唯一的,但我原来的function将不会接受二维数组。

有没有办法只search一个二维数组的“列”来查看是否存在string?

我想到了一些解决方法,包括连接两个值,并将它们保存在一维数组中,然后将它们parsing出来,但是我想知道是否可以find“如果一个元素是唯一的”方法。

下面应该工作,只要你传递一个2或更多的列数组

 Function IsInArray(stringToBeFound1 As String,stringToBeFound2 As String, arr As Variant) As Boolean Found1 = 0 Found2 = 0 for x=0 to ubound(arr) if stringToBeFound1 = arr(x,0) then 'found Found1=1 end if if stringToBeFound2 = arr(x,1) then 'found Found2=1 end if if Found1 =1 and Found2 =1 then IsInArray = TRUE next End Function 

这个简单的代码将帮助你find一维或二维数组中的string。 看看你的代码中如何编号列索引,也许If i = ColumnToCheck Then需要一点改进

 Function IsInArray(stringToBeFound As String, arr As Variant, Optional ColumnToCheck As Integer = 1) As Boolean For i = LBound(arr, 2) To UBound(arr, 2) 'columns If i = ColumnToCheck Then For j = LBound(arr, 1) To UBound(arr, 1) 'rows If arr(j, ColumnToCheck) = stringToBeFound Then IsInArray = True Exit Function End If Next j End If Next i End Function 

感谢Dean MacGregor和Jason_Walker的评论。 我之前没有用过字典,而这正是这里所要求的。 以下两个问题让我需要去哪里。

如果你们中的任何一方想在这里发布一个单独的答案,我很乐意删除这个并接受你的答案。

VBA是否有字典结构?

迭代VBA词典?