2016-07-08 10 views
3

値が配列内にあるかどうかを確認するコードがあります。値が配列内にあるかどうかをExcel VBAで確認する

Sub test() 
    vars1 = Array("Examples") 
    vars2 = Array("Example") 
    If IsInArray(Range("A1").Value, vars1) Then 
     x = 1 
    End If 

    If IsInArray(Range("A1").Value, vars2) Then 
     x = 1 
    End If 
End Sub 

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean 
    IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) 
End Function 

セルA1IsInArrayの両方が、それが唯一のそれは私が変更する必要が何をすべきかvars1配列

に存在を見つける必要があるときに、両方の配列のために、既存のようにそれを検出し、何らかの理由で単語Examplesが含まれている場合私のIsInArray機能を完全に一致させるためには?

+0

@JohnColemanよう

Public Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean Dim i For i = LBound(arr) To UBound(arr) If arr(i) = stringToBeFound Then IsInArray = True Exit Function End If Next i IsInArray = False End Function 

使用私はエンターを押した後に消えてしまった。それほどわかります – Brad

+0

セルA1に "Example"が含まれている場合、関数IsInArrayがそれらを検出したことを意味しますか? – bastio84

答えて

0

は、あなたはそれが右のをチェックするために失敗した場合範囲(「A1」)。値に存在するかどうかをチェックしたいですか?私はmycodeが完璧に動作すると思います。チェックしてください。値が配列内に存在するかどうかを確認するために、Excel VBAで

Sub test() 
Dim string1 As String, string2 As String 
string1 = "Examples" 
string2 = "Example" 
If InStr(1, Range("A1").Value, string1) > 0 Then 
    x = 1 
ElseIf InStr(1, Range("A1").Value, string2) > 0 Then 
    x = 2 
End If 

End Subの

+0

はい、 'Examples'はA1にあり、使用しているような文字列を使用することはできません。コード用の配列を持っています。そうでなければ普通は' InStr'を使用します。 – Ryflex

1

使用一致()関数。

Sub test() 
    Dim x As Long 

    vars1 = Array("Abc", "Xyz", "Examples") 
    vars2 = Array("Def", "IJK", "MNO") 

    If IsNumeric(Application.Match(Range("A1").Value, vars1, 0)) Then 
     x = 1 
    ElseIf IsNumeric(Application.Match(Range("A1").Value, vars2, 0)) Then 
     x = 1 
    End If 

    MsgBox x 
End Sub 
+1

'IsInArray'関数を' =問題を解決するIsError(Application.Match(stringToBeFound、arr、0)) ' – Ryflex

+0

IsError()とIsNumeric()はMatch()関数で使用すると同じ答えになりません – Sixthsense

4

この質問はここに頼まれた:VBA Arrays - Check strict (not approximative) match

Sub test() 
    vars1 = Array("Examples") 
    vars2 = Array("Example") 
    If IsInArray(Range("A1").value, vars1) Then 
     x = 1 
    End If 

    If IsInArray(Range("A1").value, vars2) Then 
     x = 1 
    End If 
End Sub 

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean 
    IsInArray = Not IsError(Application.Match(stringToBeFound, arr, 0)) 
End Function 
+1

配列をループする必要はありませんそれがExcelで行われると、Excelとの比較を行う強力なmatch()関数があるためです。 – Sixthsense

7

あなたはこのようにそれをブルートフォースすることができます:アイアイ、私が見た

IsInArray("example", Array("example", "someother text", "more things", "and another")) 
+0

元のコードで 'IsInArray = Not IsError(Application.Match(stringToBeFound、arr、0))'を使用する代わりに、あなたのメソッドを使用することにメリットとネガティブがありますか? – Ryflex

+0

あなたの配列の大きさはどれくらいですか?これは他の方法よりも読みやすいですか?配列を反復処理するのはかなり簡単で、(確かに言うことはできませんが)Match関数は基本的にこれをやっているので、それは単に好みかもしれません。 – Brad

+0

私は10個の配列を 'IsInArray'で実行していますが、合計すると合計で501個の配列になります。それは最終的にそれらのより大きくなる/より多くなるでしょう。 – Ryflex

関連する問題