2016-04-26 13 views
0

私はvbaを使用しています。文字列としてstrを取得します。 次のタスクを実行したいと思います。配列の値が真であるかどうかをチェックする方法

次の配列があります。

array1 = (string1, string2, string4) 
array2 = (string3, string6, string7) 
array3 = (string3, string6, string7) 

str = some string 

if str is present in array2 then 
sbj = "subject2" 

if str is present in array1 then 
sbj = subject1 

は賢明 ように私は

Function sw(s) 
    sw = Switch(s = "a", "Apple", s = "b", "Banana", s = "c", "Apple", s="d", "banana") 
End Function 

を意味し、Cの両方のようなバナナ、リンゴとBとDされている、私は混乱していますが、現在、私は(うまく機能)長いスイッチfuncitonで立ち往生しています自演しましたそれ。これに何か他のものを使うことはできますか?

+1

たとえば、 '' 'IsPresent(str、arr)' ''そしてこの関数ではarrをループし、strと各項目を比較します。一致するとループを終了し、 '' 'true''を返します。 – dee

答えて

2

は、アレイに参加し

Dim test As Boolean 
Dim findStr As String 
Dim result As String 

findStr = "apple" 

varArray = Array("banana", "apple", "pear", "orange") 

test = Join$(varArray, " ") Like "*apple*" 

result = "apple is " & IIf(test, vbNullString, "not ") & "included" 

がアレイを通してループを有する保存さそのように確認します。


さらに、あなたのアプローチを再考することです。配列は非常に基本的な方法で同様のデータのセットを格納するためにそこにあるが、少し便利な何かを必要とするので、代わりにCollectionDictionaryまたはArrayListオブジェクトを使用して見てください。

+0

お返事ありがとうございます。私にチェックさせてください。 – Rahul

+0

問題は配列にピンネイルがある可能性があり、テストでtrueが返されますが、リンゴは配列内にありません。 – Clon

+0

@Clonあいまいな質問への曖昧な答え - それをより正確にする方法はありますが(例えばマッチパターンの区切り文字を使用して)、私がここで作りたかったのは、一般的な 'Array'クラスはおそらく最小ですこの種の問題に適したオブジェクトです。 –

1

要素が配列内にあるかどうかをチェックするプライベート関数を定義し、この関数をIF .. THEN句で使用できます。

Public Function elemInArray(ByVal elem As Variant, ByVal Arr As Variant) As Boolean 

    Dim el As Variant 

    elemInArray = False 

    Select Case IsObject(elem) 
    Case True 
     For Each el In Arr 
      If el Is elem Then elemInArray = True: Exit Function 
     Next el 

    Case False 
     For Each el In Arr 
      If el = elem Then elemInArray = True: Exit Function 
     Next el 

    End Select 

End Function 

EDIT:またはこの、シンプルな機能は、お使いの配列が唯一のプリミティブ型

Public Function elemInArray(ByVal elem As Variant, ByVal Arr As Variant) As Boolean 

    Dim el As Variant 

    elemInArray = False 

    For Each el In Arr 
     If el = elem Then elemInArray = True: Exit Function 
    Next el 

End Function 

が含まれている場合、あなたはこのようなものを求めることができます:あなたの2番目の質問については

if elemInArray(str, arr1) then 
    sbj = "subject1" 

、次のようにIF条件文またはSELECT CASE文を使用することもできます。

IF s = "a" or s = "c" then 
    sw = "Apple" 
ELSEIF s = "b" or s = "d" then 
    sw = "banana" 
ELSE 
    err.raise 10000,"Unexpected value" 
ENDIF 
あなたはそれが "A"、 "B"、 "C" または "D" のいずれかになりますよ保証できる場合

または

SELECT CASE sw 
CASE "a","c" 
    sw = "Apple" 
CASE "b","d" 
    sw = "Banana" 
CASE else 
    err.raise 10000,"Unexpected value" 
END SELECT 

あなたはELSEの一部を省略することができます。

よろしく

+0

回答ありがとうございます。 – Rahul

+0

elemInArray関数でSELECT CASEは必要ありません。あなたはちょうど(各エル・イン・アールのために...エル=エレムなら···。残りの部分は、オブジェクトの配列で関数を使用したい場合に使用します。 – Clon

関連する問題