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