VBA在2D数组的“列”中查找值

时间:2015-06-09 14:37:46

标签: arrays excel vba

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

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean.
  IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
在添加之前

在每个元素上。到目前为止,非常好。

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

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

我想过几个解决方法,包括连接两个值并将它们保存在一维数组中,然后将它们解析出来等等,但我想知道“找到一个元素是否唯一”的方法是可能的。

3 个答案:

答案 0 :(得分:0)

下面应该可行,只要你传递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

答案 1 :(得分:0)

这个简单的代码可以帮助您在1D或2D数组中找到字符串。 查看代码中编号列索引的编号方式,可能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

答案 2 :(得分:0)

感谢Dean MacGregor和Jason_Walker的评论。我之前没有使用过字典,而且它们正是这里所要求的。以下两个问题让我得到了我需要去的地方。

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

Does VBA have Dictionary Structure?

Iterate over VBA Dictionaries?