2016-07-24 10 views
0

ExcelでVBAマクロを使用するのは非常に新しいです。私は、他の文字列値のセットで文字列値をチェックしたいと思います。たとえば、ccの値が("Q6", "_Q6", "1_Q", "2_Q", "3_Q", "4_Q")であり、ccの値がQ6の場合です。VB ExcelのIf thenの "in"に相当。

私の擬似コードは次のとおりです。

If cc in ("Q6", "_Q6", "1_Q", "2_Q", "3_Q", "4_Q") Then 

私はinの代わりにどうあるべきかをオペレータ分かりません。だから、inの代わりに何をすべきなのですが、現在は構文エラーです。あなたの助けに感謝します。

答えて

1

Select Case文が非常にうまく(かつ効率的)これを行うことができます。 http://www.exceltrick.com/formulas_macros/vba-select-case-statement/

Select Case cc 
    Case "Q6", "_Q6", "1_Q", "2_Q", "3_Q", "4_Q" 
     ' If ... Then 
     ' Stuff you want to do if any of the above 
    Case Else 
     ' Else 
     ' Whatever you if none of the above 
End Select 
+0

私が行ったこと。それは単純で効率的でした:) – Santosh

1

一致が見つかると文字列配列を返すFilter関数を使用できます。

UBound(Filter(Array("Q6", "_Q6", "1_Q", "2_Q", "3_Q", "4_Q"), "Q6", True, vbBinaryCompare))

1を返しますが、3番目の引数がFalseであるならば、それは5だろう入力し、一致していない配列のアイテムを返すことに注意してください:あなたの例。

より完全な例:

Option Explicit 

Sub Test() 

    Dim varData As Variant 
    Dim strCC As String 
    Dim varFilter As Variant 
    Dim intCounter As Integer 

    varData = Array("Q6", "_Q6", "1_Q", "2_Q", "3_Q", "4_Q") 
    strCC = "foo" 
    varFilter = Filter(varData, strCC, True, vbBinaryCompare) 
    For intCounter = LBound(varFilter) To UBound(varFilter) 
     Debug.Print varFilter(intCounter) 
    Next intCounter 

End Sub