1

ウェブサイトを検索しましたが、成功しませんでした。これについて調査を試みましたが、「型の不一致」エラーに直面しました。

配列を整数型として宣言しましたが、FILTER 関数は STRING でのみ機能するようです。整数に対して FILTER 関数を使用する方法を教えてください。

If UBound(Filter(CntArr(), count)) > 0 Then msgbox "found"

End If

4

2 に答える 2

1

以下では、ブール値を返す 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
于 2019-03-07T08:45:38.107 に答える