Arrays VBA在“a”中查找值;栏「;二维数组的构造

Arrays VBA在“a”中查找值;栏「;二维数组的构造,arrays,excel,vba,Arrays,Excel,Vba,我以前是通过在电子表格中循环一列来动态构建一维数组的。因为我只需要这个数组中的唯一值,所以我调用 Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean. IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 在添加元素之前对每个元素执行。到目前为止,一切顺利 现在我需要存储两列中的元素,所以我需要将其扩展到二维

我以前是通过在电子表格中循环一列来动态构建一维数组的。因为我只需要这个数组中的唯一值,所以我调用

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean.
  IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
在添加元素之前对每个元素执行。到目前为止,一切顺利

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

有没有办法只搜索二维数组的一个“列”来查看字符串是否存在?


我已经想到了一些解决方法,包括将两个值连接起来并将它们保存在1D数组中,然后解析它们,等等,但是我想知道“查找一个元素是否唯一”的方法是否可行。如果您传递一个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

这段简单的代码将帮助您在1D或2D数组中查找字符串。 检查代码中的列索引是如何编号的,如果i=ColumnToCheck,则可能需要改进

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

感谢迪安·麦克格雷戈和杰森·沃克的评论。我以前没有用过字典,它们正是这里所需要的。以下两个问题让我找到了我需要去的地方

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


数组(0,0)将是A1,数组(0,1)将是B1。循环时,只需确保将数组的第二部分作为常量引用(例如列引用),并增加第一部分(例如行),即从第二列存储的值基本上是从第一列存储的值的对应值。例如,您的值基本上是:
A1:B1
A4:B4
A9:B9
?你还可以发布你的循环函数吗?你最好的选择是放弃使用数组,而是使用
字典
数据类型。从中检索数据会快得多。以下是如何开始使用Dictionary对象。键将确定唯一的元素,两列可以存储在由分隔符分隔的项中。