Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA zwei Kriterien in einer Zeile suchen

VBA zwei Kriterien in einer Zeile suchen
Larissa
Hallo,
ich prüfe mit einem Makro in Spalte B, ob eine Belegnummer schon vorhanden ist.
If Range("B:B").Find(Sheets("Einkauf").Range("C4")) Is Nothing Then
GoTo ohnenr
Else
If MsgBox("Die Belegnummer ist bereits vorhanden," & Chr(13) & "sollen die Daten überschrieben werden?", vbQuestion + vbYesNo, "Frage?") = vbNo Then
Exit Sub
End If
End If
Da es vielleicht mal eine Belegnr-Nr. von zwei unterschiedlichen Firmen genutzt wird, möchte ich zur Sicherheit auch noch das Datum überprüfen.
Das Datum soll in Spalte D:D gesucht werden und kommt aus Range("C5")
Vielen Dank für Eure immer sehr geschätzte Hilfe.
Gruß, Larissa
Anzeige
AW: VBA zwei Kriterien in einer Zeile suchen
06.10.2009 12:56:00
Matthias5
Hallo Larissa,
If Range("B:B").Find(Sheets("Einkauf").Range("C4")) Is Nothing And Range("D:D").Find(Sheets("Einkauf").Range("C5")) Is Nothing Then
GoTo ohnenr
Else
If MsgBox("Die Belegnummer ist bereits vorhanden," & Chr(13) & "sollen die Daten überschrieben werden?", vbQuestion + vbYesNo, "Frage?") = vbNo Then
Exit Sub
End If
End If
Gruß,
Matthias
Anzeige
Danke Matthias
06.10.2009 22:33:13
Larissa
Danke Matthias, so einfach ist es manchmal - Vielen Dank
VBA zwei Kriterien in einer Zeile suchen
06.10.2009 23:22:10
Larissa
Hallo,
das funktioniert leider noch nicht so ganz. Belenr. und Datum sollten in der selben Zeile gesucht werden. Jetzt geht das Makro weiter, sobald die Rg-Nr gefunden wird, egal was bei dem Datum steht.
Vielen Dank schon mal für Eure Hilfe.
Gruß, Larissa
Anzeige
AW: VBA zwei Kriterien in einer Zeile suchen
07.10.2009 16:15:19
David
Hallo Larissa,
ich verstehe deine Frage nicht ganz:
wenn die Belegnummer GEFUNDEN wird, soll das Datum daneben geprüft werden, oder wenn die Belegnummer NICHT GEFUNDEN wird?
So habe ich das verstanden:
Sub test()
If Not Range("B:B").Find(Sheets("Einkauf").Range("C4")) Is Nothing Then
If Range(Range("B:B").Find(Sheets("Einkauf").Range("C4")).Address).Offset(, 2) = Range("C5") _
Then
If MsgBox("Die Belegnummer ist bereits vorhanden," & Chr(13) & "sollen die Daten ü _
berschrieben werden?", vbQuestion + vbYesNo, "Frage?") = vbNo Then
Exit Sub
End If
Else
'GoTo ohnenr
MsgBox "nicht vorhanden" 'dummy, da Sprungmarke nicht existent
End If
Else
'GoTo ohnenr
MsgBox "nicht vorhanden" 'dummy, da Sprungmarke nicht existent
End If
End Sub

Gruß
David
Anzeige
Perfekt - Danke David
07.10.2009 19:51:11
Larissa
Hallo David,
so ist es perfekt. Nur eine kleine Äanderung - Range("C5") muss Sheets("Einkauf").Range("C5") heißen.
Super, Danke David.
unerwünschtes Verhalten in dem Makro
11.10.2009 08:45:08
Larissa
Guten Morgen,
mir ist in dem Makro von David ein unerwünschtes Verhalten aufgefallen.
Wenn nur ein Teil der Belegnummer übereinstimmt, reagiert das Makro so, als wäre es eine 100%ige Übereinstimmung. Z.B. steht in C4 die Zahl 123 und in Spalte B:B wird die Nr. B123N4 gefunden. Dann ist es für das Makro eine Übereinstimmung.
Wie kann ich das verhindern?
Viele Grüße, Larissa
Anzeige
AW: unerwünschtes Verhalten in dem Makro
11.10.2009 12:30:16
F1
If Not Range("B:B").Find(Sheets("Einkauf").Range("C4"), Lookat:=xlWhole) Is Nothing Then
Danke F1 das scheint zu klappen
11.10.2009 14:00:26
Larissa
oT
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA für die Suche nach zwei Kriterien in einer Zeile


Schritt-für-Schritt-Anleitung

Um mit Excel VBA mehrere Kriterien in einer Zeile zu suchen, kannst du folgenden Schritt-für-Schritt-Ansatz verwenden:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste im Projekt-Explorer auf „VBAProject (DeineDatei.xlsx)“ und wähle „Modul einfügen“.

  3. Füge den folgenden Code ein:

    Sub SucheNachBelegnummerUndDatum()
        Dim belegnummer As Range
        Dim datum As Range
        Dim gefunden As Range
    
        Set belegnummer = Sheets("Einkauf").Range("C4")
        Set datum = Sheets("Einkauf").Range("C5")
    
        ' Suche die Belegnummer in Spalte B und das Datum in Spalte D
        Set gefunden = Range("B:B").Find(belegnummer)
    
        If Not gefunden Is Nothing Then
            If Range(gefundene.Address).Offset(, 2) = datum Then
                If MsgBox("Die Belegnummer und das Datum sind vorhanden. Sollen die Daten überschrieben werden?", vbQuestion + vbYesNo) = vbNo Then
                    Exit Sub
                End If
            Else
                MsgBox "Das Datum stimmt nicht überein."
            End If
        Else
            MsgBox "Die Belegnummer wurde nicht gefunden."
        End If
    End Sub
  4. Schließe den VBA-Editor und teste das Makro.


Häufige Fehler und Lösungen

  1. Problem: „VBA Find nothing“ – Das Makro findet keine Belegnummer.

    • Lösung: Stelle sicher, dass die Belegnummer im richtigen Format vorliegt. Verwende LookAt:=xlWhole in der Find-Methode, wenn die genaue Übereinstimmung erforderlich ist.
    Set gefunden = Range("B:B").Find(belegnummer, LookAt:=xlWhole)
  2. Problem: Das Datum wird nicht korrekt überprüft.

    • Lösung: Achte darauf, dass das Datum im richtigen Format (z.B. Datum als Date) vorliegt.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du auch die Funktion COUNTIFS verwenden, um mehrere Kriterien zu prüfen:

=COUNTIFS(B:B, C4, D:D, C5)

Diese Funktion gibt die Anzahl der Zeilen zurück, die sowohl die Belegnummer als auch das Datum erfüllen. Ist das Ergebnis größer als 0, sind beide Kriterien erfüllt.


Praktische Beispiele

Angenommen, du möchtest in einem Excel-Dokument prüfen, ob eine Belegnummer in Spalte B und das zugehörige Datum in Spalte D vorhanden sind. Du kannst das oben genannte Makro verwenden, um diese Informationen zu verarbeiten.

Ein weiteres Beispiel:

If Not Range("B:B").Find(Sheets("Einkauf").Range("C4"), LookAt:=xlWhole) Is Nothing Then
    ' Weitere Logik hier
End If

Hier wird gezielt nach einer exakten Übereinstimmung gesucht, um unerwünschtes Verhalten zu vermeiden, wie es Larissa im Forum beschrieben hat.


Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, Variablen zu deklarieren, bevor du sie verwendest, und kann dazu beitragen, Fehler zu vermeiden.
  • Fehlerbehandlung: Implementiere Fehlerbehandlung mit On Error Resume Next und On Error GoTo 0, um unerwartete Fehler zu managen.
  • Optimierung: Nutze Application.ScreenUpdating = False, um die Bildschirmaktualisierung während des Makroablaufs zu deaktivieren und die Ausführung zu beschleunigen.

FAQ: Häufige Fragen

1. Wie kann ich prüfen, ob die Belegnummer und das Datum in der gleichen Zeile stehen? Um sicherzustellen, dass beide Werte in der gleichen Zeile vorhanden sind, kannst du die Offset-Methode verwenden, um das Datum in der Zeile der gefundenen Belegnummer zu überprüfen.

2. Was mache ich, wenn kein Ergebnis gefunden wird? Verwende eine If-Abfrage, um zu prüfen, ob das Ergebnis Nothing ist, und gib eine entsprechende Nachricht aus.

3. Gibt es eine Möglichkeit, die Suche effizienter zu gestalten? Ja, du kannst die Daten in einem Array speichern und die Suche dort durchführen, um die Leistung zu verbessern, insbesondere bei großen Datenmengen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige