如果某个字符串,数字或日期在数组中,我找到了一个返回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
我已经尝试更改数组引用,将日期更改为数字,更改为字符串,并尝试根据项目的最大数量重新调整数组,但错误仍然存在。
有什么想法吗?
答案 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