nach 2 Werten suchen Funktion

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    nach 2 Werten suchen Funktion

    Hallo,
    vorab, ich hab mit VBA seit Jahren nicht mehr viel gemacht und bin daher etwas raus...
    Ich habe eine Excelliste in die per Userform Artikel eingegeben werden.
    Nun möchte ich beim Eintragen prüfen ob der Artikel des Verkäufers schon eingetragen ist.
    Dazu hatte ich kir folgende Funktion erstellt:

    Visual Basic-Quellcode

    1. Function ArtikelVorhanden(vk As String, art As String) As Boolean
    2. With Worksheets("Kassenliste").Range("A2:B1000")
    3. If Not .Find(vk, LookIn:=xlValues) Is Nothing And Not .Find(art, LookIn:=xlValues) Is Nothing Then
    4. ArtikelVorhanden = True
    5. Else
    6. ArtikelVorhanden = False
    7. End If
    8. End With
    9. End Function

    die Tabelle "Kassenliste" siht ungefähr so aus
    Verkäufer
    Artikel
    Preis
    1
    4
    3,50
    2
    5
    35,0
    1
    4
    3,5
    1
    5
    6,6



    eine Funktion funktioniert in soweit, das bei Eingabe von 1 und 4 im obigen Beispiel die Box kommt und mir sagt das den Artikel schon gibt. Bis hierher alles gut.
    Aber die Box kommt auch bei 1 5, da es ja 5 schon gibt, allerdings bei nem anderen Verkäufer.

    Wie muss ich meine Funktion ändern, das nur dann die Box kommt, wenn exakt der Artikel eingegeben wird den es bei dem Verkäufer schon gibt (im Beispiel also 1 4)

    Danke Euch
    "Hier könnte Ihre Werbung stehen..."
    Habs jetzt so gelöst:

    Visual Basic-Quellcode

    1. Function ArtikelVorhanden(vk As String, art As String) As Boolean
    2. Dim i As Long
    3. With Worksheets("Kassenliste")
    4. For i = 2 To 1000
    5. If .Cells(i, 1).Value = vk And Cells(i, 2).Value = art Then
    6. ArtikelVorhanden = True
    7. Exit For
    8. Else
    9. ArtikelVorhanden = False
    10. End If
    11. Next i
    12. End With
    13. End Function
    "Hier könnte Ihre Werbung stehen..."
    .Find(vk, LookIn:=xlValues)
    Hier unbedingt LookAt:=xlWhole angeben, sonst findet er die 1 auch bei Verkäufer 13.

    Dein Problem ist ein Filter über zwei Spalten.
    Wenn du nicht all zu viele Artikel hast, ist der Ansatz über die Schleife tragbar.
    Da du von vornerein auf 1000 begrenzt, scheint das der Fall zu sein.
    Es wäre allerdings effizient, die Schleifendurchläufe auf die Anzahl der eingetragenen Zellen zu begrenzen.

    Visual Basic-Quellcode

    1. Function ArtikelVorhanden(vk As String, art As String) As Boolean
    2. Dim r As Long
    3. With Worksheets("Kassenliste")
    4. For r = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
    5. If .Cells(r, 1).Value = vk And Cells(r, 2).Value = art Then
    6. ArtikelVorhanden = True
    7. Exit For
    8. End If
    9. Next r
    10. End With
    11. End Function

    Den Else-Zweig habe ich weggelassen.
    Er ist überflüssig, da der Returnwert mit False vorbelegt ist,

    Wenn der Datenstamm umfänglicher wird, kannst du dir auch mit einer Hilfsspalte helfen, in der du (per Formel) die Spalten 1 und 2 verkettest.
    Auf die kannst du dann mit .Find zugreifen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke @petaod funktioniert bestens.
    Der Basar ist Gott sei Dank rum, den nächsten richtet meine Frau erst im Frühjahr wieder aus.
    Bis dahin schreibe ich ein neues Programm dazu, in C# mit DataSet...
    "Hier könnte Ihre Werbung stehen..."