2016-04-26 18 views
0

Ich benutze Vba und ich bekomme Str als String Ich möchte folgende Aufgabe acomplish.Wie überprüft man, ob der Wert im Array wahr ist

gibt es folgendes Array;

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 

wie weise ich kno Ich bin verwirrend, aber zur Zeit bin ich mit langen Schalter funciton stecken (die gut funktioniert)

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

bedeutet a und c beide sind Apfel- und b und d Banane wie Das. Können wir etwas anderes dafür verwenden?

+1

Erstellen Sie einfach eine Funktion namens z. '' 'IsPresent (str, arr)' '' und in dieser Funktion durchlaufen Sie den arr und vergleichen Sie str gegen jedes Element. Bei Übereinstimmung dann Schleife verlassen und '' 'true''' zurückgeben. – dee

Antwort

2

verbinden das Array und prüfen, dass Weise

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" 

speichert durch das Array in einer Schleife aufweist.


Noch besser ist es, Ihren Ansatz zu überdenken. Arrays sind dort, um Sätze von ähnlichen Daten auf eine sehr einfache Art und Weise zu speichern, aber Sie brauchen etwas nützlicheres, schauen Sie sich stattdessen ein Objekt Collection, Dictionary oder ArrayList an.

+0

Danke für die Antwort. Lass mich das überprüfen. – Rahul

+0

Das Problem ist, dass Sie Pinneaple im Array haben können und der Test wird True, aber Apple ist nicht im Array. – Clon

+0

@Clon vage Antwort auf eine vage Frage - es gibt Möglichkeiten, um es genauer zu machen (mit dem Trennzeichen im Matchmuster zum Beispiel), aber der eigentliche Punkt, den ich hier machen wollte, ist, dass die generische 'Array' Klasse wahrscheinlich am wenigsten ist geeignetes Objekt für diese Art von Problem. –

1

Sie können eine private Funktion definieren, um zu prüfen, ob ein Element in einem Array ist oder nicht, und diese Funktion in Ihren IF..THEN -Klauseln verwenden.

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: Oder diese, einfachere Funktion, wenn Ihr Array nur primitive Typen

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 

Dann enthält können Sie Dinge wie diese fragen:

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

Was Ihre zweite Frage, Sie können auch IF-Bedingungen oder eine SELECT-CASE-Anweisung wie folgt verwenden:

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 

oder

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

können Sie die ELSE Teil weglassen, wenn Sie garantieren können, dass wird ein "a" s, "b", "c" oder "d".

Grüße

+0

Danke für die Antwort. Lassen Sie mich überprüfen – Rahul

+0

Sie brauchen nicht wirklich die SELECT CASE in der elemInArray-Funktion. Du kannst den (für JEDEN el IN Arr ... Wenn el = elem Then .... Next el) Teil behalten. Der Rest ist nur für den Fall, dass Sie die Funktion mit einem Array von Objekten verwenden möchten. – Clon

Verwandte Themen