ウェブサイトを検索しましたが、成功しませんでした。これについて調査を試みましたが、「型の不一致」エラーに直面しました。
配列を整数型として宣言しましたが、FILTER 関数は STRING でのみ機能するようです。整数に対して FILTER 関数を使用する方法を教えてください。
If UBound(Filter(CntArr(), count)) > 0 Then
msgbox "found"
End If
ウェブサイトを検索しましたが、成功しませんでした。これについて調査を試みましたが、「型の不一致」エラーに直面しました。
配列を整数型として宣言しましたが、FILTER 関数は STRING でのみ機能するようです。整数に対して FILTER 関数を使用する方法を教えてください。
If UBound(Filter(CntArr(), count)) > 0 Then
msgbox "found"
End If
以下では、ブール値を返す IsIntegerInArray() 関数を作成しました。整数配列宣言の例については、2 つの Subs に従ってください。配列を整数として宣言すると、暗黙的なデータ変換によって引き起こされる不要なバグも防ぐことができます。
Sub test_int_array()
Dim a() As Integer
ReDim a(3)
a(0) = 2
a(1) = 15
a(2) = 16
a(3) = 8
''' expected result: 1 row for each integer in the array
Call test_printing_array(a)
End Sub
Sub test_printing_array(arr() As Integer)
Dim i As Integer
For i = 1 To 20
If IsIntegerInArray(i, arr) Then
Debug.Print i & " is in array."
End If
Next i
End Sub
Function IsIntegerInArray(integerToBeFound As Integer, arr() As Integer) As Boolean
Dim i As Integer
''' incorrect approach:
''' IsIntegerInArray = (UBound(Filter(arr, integerToBeFound)) > -1) ' this approach searches for string, e.g. it matches "1" in "12"
''' correct approach:
IsIntegerInArray = False
For i = LBound(arr) To UBound(arr)
If arr(i) = integerToBeFound Then
IsIntegerInArray = True
Exit Function
End If
Next i
End Function