Excel - Werte im Array suchen

jerry0110

Erfahrenes Mitglied
Hi,

ich brauche mal wieder Hilfe.

Ziel ist es, dass ich verschiedene Werte in einem Array suche und wenn sie vorhanden sind, wir etwas ausgeführt. In diesen Fall soll etwas ausgeblendet werden.

Ich habe ein Feld mit entweder einem String drin (233 Bauer). Dann habe ich aber wiederrum das gleiche Feld wo mehrere Strings vorhanden sind, die mit einem ";" getrennte sind. (233 Bauer; 255 Kuh; 654 Milch).

Jetzt trenne ich diesen String dann mit einen Split auf. Soweit bin ich schon.

Wert = Split(String, ";")

Somit habe ich dann ja ein Wert Array. Jetzt will ich z. B. sagen, wenn da 233 Bauer drin ist dann soll er mir Schaltfläche 255 Kuh und 654 Milch deaktivieren, unsichtbar oder nicht aktivieren. What ever.

Wenn aber mehrere vorhanden sind dann soll er mir dann immer das deaktivieren, was nicht vorhanden ist.

Ich hoffe ich konnte das ein wenig erklären was ich möchte.

Im Grunde:

If Wert() = "233 Bauer" Then
....

Aber irgendwie klappt das nicht
 
So auf die Schnelle

Visual Basic:
Option Explicit

'Definition aller verfügbaren Werte
Const C_ALL = "233 Bauer; 255 Kuh; 654 Milch"

' Die Eigenltiche Methode
Public Sub test(ByVal iString As String)
    Dim all() As String
    Dim values() As String
    Dim i As Long
    
    'wenn der String leer ist, abbrechen
    If Trim(iString) = "" Then Exit Sub
    
    all = splitAndTrim(C_ALL)
    values = splitAndTrim(iString)
    
    For i = 0 To UBound(all)
        If inArray(values, all(i)) Then
            'TODO all(i) ist aktiv
            Debug.Print all(i) & " ist aktiv"
        Else
            'TODO all(i) ist nicht aktiv
            Debug.Print all(i) & " ist inaktiv"
        End If
    Next i
    
End Sub

'/**
' * Einen String splitten und die Werte gleich noch Trimmen
' * @param  String      Text zum Splitten
' * @return Array<String>
' */
Private Function splitAndTrim(ByVal iString As String) As String()
    Dim i As Long
    Dim retArr() As String
    
    retArr = Split(iString, ";")
    For i = 0 To UBound(retArr)
        retArr(i) = Trim(retArr(i))
    Next i
    splitAndTrim = retArr
End Function
    
    
'/**
' * Prüft ob ein Wert in einem Array vorhanden ist
' * http://wiki.yaslaw.info/wikka/VbVbaArrayFunctions#inArray
' * @param  Array
' * @param  Gesuchter Wert
' * @return Boolean
' * @example test_vorhanden = inArray(myArray, "test")
'*/
Private Function inArray(ByRef iArray As Variant, ByVal iValue As Variant) As Boolean
    Dim i As Long
 
On Error GoTo Err_Handler
    'Falls iArray kein initialisierter Array ist, gehts zur Fehlerbahndlung
    For i = LBound(iArray) To UBound(iArray)
        inArray = (iValue = iArray(i))
        If inArray Then GoTo Exit_Handler
    Next i
 
Exit_Handler:
    Exit Function
Err_Handler:
    'Array ist nicht initialisiert. Somit gibts kein Treffer
    inArray = False
    Resume Exit_Handler
End Function

Test im Direktfenster
Code:
test "255 Kuh"
233 Bauer ist inaktiv
255 Kuh ist aktiv
654 Milch ist inaktiv

test "255 Kuh;654 Milch"
233 Bauer ist inaktiv
255 Kuh ist aktiv
654 Milch ist aktiv
 

Neue Beiträge

Zurück