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对象。键将确定唯一的元素,两列可以存储在由分隔符分隔的项中。