2016-04-26 132 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 

意味着A和C都是蘋果和b和d香蕉狀那。我們可以使用其他的東西嗎?

+1

創建簡單的稱爲例如'''IsPresent(str,arr)'''在這個函數中循環遍歷arr並且比較每個item的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" 

節省通過陣列,具有循環。


更好的是重新考慮你的方法。數組可以以非常基本的方式存儲一組類似的數據,但是您需要一些更有用的東西,所以請注意使用CollectionDictionaryArrayList對象。

+0

感謝您的回答。讓我檢查一下。 – Rahul

+0

問題是你可以在數組中有pinneaple並且測試將返回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 

編輯:還是這個,簡單的功能,如果您的陣列只包含基本類型

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 

然後,你可以問這樣的事情:

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 

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

可以省略ELSE的一部分,如果你能保證S將是 「A」, 「B」, 「C」 或 「d」 之一。

問候

+0

感謝您的回答。讓我檢查 – Rahul

+0

你不需要在elemInArray函數中使用SELECT CASE。你可以保留(FOR EACH EL IN ARR ...如果EL = ELEM然後....下一個EL)的一部分。剩下的就是爲了防止你想用一個對象數組來使用函數。 – Clon