IsInArray函数VBA

如果某个string,数字或date在数组中,我发现一个函数返回true / false结果。 我稍微修改它,所以它给了我一个数字(如果该值在数组中,它给了我坐标,否则它给我-1)。

Public Function IsInArray2(DateToBeFound As Date, arr As Variant) As Long Dim position As Long IsInArray2 = -1 For position = LBound(arr, 1) To UBound(arr, 1) If arr(position) = DateToBeFound Then IsInArray2 = position Exit For End If Next End Function 

我想用这个函数来检查date是否在一个数组中。 如果是这样,我可以在我的代码中使用坐标进一步计算。

问题:由于某种原因,我得到和错误(下标超出范围)在行中:

 If arr(position) = DateToBeFound Then 

我已经尝试过改变数组引用,将date改为数字,改为string,并尝试重新设置数组的最大数量,但错误依然存在。

有任何想法吗?

当您直接从工作表上的范围加载数组时:

Arr=Sheets(1).Range("A1:B2").Value

该数组是2维的!

所以你需要使用Arr(position,1) ! ;)

“垂直范围”(多于一行)产生二维数组,但For Each循环都可以使用(未​​testing):

 Public Function IndexOf(arr, value) As Long Dim v: IndexOf = 0 For Each v in arr If v = value Then Exit For IndexOf = IndexOf + 1 Next IndexOf = -1 ' not found End Function 

对于非date或货币types:

 Public Function IndexOf(arr, value) As Long Dim v: v = Application.Match(arr, value, 0) IndexOf = IIf(IsError(v), -1, v) End Function