2016-04-20 6 views
0

Forループを実行してバリアント配列内の文字列を検索しています。 StrCompを使用して文字列を比較しています。次の形式で使用している配列。 enter image description hereVBA - StrComp型の不一致または添字が範囲外にある

私は、以下で説明する2つのアプローチを試しました。私はCOL = 0

Function IsInArray(stringToBeFound As String, arr As Variant, col As Integer) As Long 
    Dim i As Long 
    ' default return value if value not found in array 
    IsInArray = -1 

    For i = LBound(arr) To UBound(arr) 
    If StrComp(stringToBeFound, arr(i, col), vbTextCompare) = 0 Then 
     IsInArray = i 
     Exit For 
    End If 
    Next i 
End Function 

第二のアプローチは、私は私がされている

Function IsIn1DArray(stringToBeFound As String, arr As Variant) As Long 
    Dim i As Long 
    ' default return value if value not found in array 
    IsIn1DArray = -1 

    For i = LBound(arr) To UBound(arr) 
    If StrComp(stringToBeFound, arr(i)) = 0 Then 
     IsIn1DArray = i 
     Exit For 
    End If 
    Next i 
End Function 

StrComp関数で不一致を入力するよう指示使用する場合

第一のアプローチは、添字が範囲外であることを返します。過去にIsInArrayとIsIn1DArrayを使用していましたが、このケースでは動作しませんでした。私は文字列 "[TestHeader]"を検索し、そのインデックスを返したいとします。どうしますか?

+0

は機能しません。文字列はセルから来ていません... – peetman

答えて

1

arr必要なので、配列の配列である:

If StrComp(stringToBeFound, arr(i)(col), vbTextCompare) = 0 Then 

注お使いのサブ配列が同じサイズではありませんので、あなたがのUboundをテストする必要があり、これはいくつかの値のために失敗する可能性があります最初に部分配列を作成します。

+0

ありがとうございました! – peetman

0
Function IsIn1dArray(stringToBeFound As String, arr As Variant) As Long 

    IsIn1dArray = Application.WorksheetFunction.Match(stringToBeFound, arr, 0) 

End Function 
関連する問題