IsInArray函数VBA

时间:2017-01-20 13:54:45

标签: arrays excel vba excel-vba

如果某个字符串,数字或日期在数组中,我找到了一个返回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

我正在尝试使用此函数来检查日期是否在数组中。如果是,我可以在我的代码中使用坐标进一步计算。

问题:出于某种原因,我收到了错误(下标超出范围):

If arr(position) = DateToBeFound Then 

我已经尝试更改数组引用,将日期更改为数字,更改为字符串,并尝试根据项目的最大数量重新调整数组,但错误仍然存​​在。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

MemoryStream memoryStream = new MemoryStream(); // Define cryptographic stream (always use Write mode for encryption). CryptoStream cryptoStream = new CryptoStream ( memoryStream, encryptor, CryptoStreamMode.Write ); // Start encrypting. cryptoStream.Write(byteArray, 0, byteArray.Length); // Finish encrypting. cryptoStream.FlushFinalBlock();

数组是2维的!

所以你需要使用Arr=Sheets(1).Range("A1:B2").Value! ;)

答案 1 :(得分:2)

“垂直范围”(多行)导致2D数组,但可以使用For Each循环(未测试):

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

对于非日期或货币类型:

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