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

Forumthread: Zeile per VBA mittels mehrerer Kriterien suchen

Zeile per VBA mittels mehrerer Kriterien suchen
05.07.2014 21:49:48
Chris
Hallo,
ich habe eine Excel-Tabelle, die in etwa so aussieht:
Spalte A | Spalte B | Spalte C | Spalte D |
Wert A | Wert 1 | Wert a | Ausgabe1 |
Wert A | Wert 1 | Wert b | Ausgabe2 |
Wert A | Wert 2 | Wert a | Ausgabe3 |
Wert B | Wert 1 | Wert c | Ausgabe4 |
Wert B | Wert 1 | Wert b | Ausgabe5 |
Wert B | Wert 2 | Wert a | Ausgabe6 |
Wert B | Wert 2 | Wert c | Ausgabe7 |
Jetzt suche ich die Zeile, in der Spalte A = A, Spalte B = 1 und Spalte C = b ist, um den Wert in Spalte D (Ausgabe2) zu erhalten.
Das Ganze möchte ich per VBA und logischerweise mit guter Performance machen, da die Tabelle ggf. mehr als 100.000 Einträge enthält.
Derzeit löse ich das indem ich die erste Spalte mittels Find Methode nach dem gesuchen Wert durchsuche und dann die anderen Spalten prüfe. Wenn nur eine der anderen Spalte nicht den jeweils gesuchten Wert enthält, durchsuche ich Spalte mittels FindNext nach der nächsten Zeile mit dem gesuchten Wert.
Ist das die beste Lösung? Kennt jemand eine bessere Lösung?
Danke für Eure Hilfe

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nutze den Autofilter
05.07.2014 22:51:51
Matze
Hallo Chris,
entweder die Suche manuell eingeben , oder per Makrorecorder aufzeichnen und die Zeilen ein wenig anpassen.
Gruß Matze

AW: Zeile per VBA mittels mehrerer Kriterien suchen
05.07.2014 22:53:52
Daniel
HI
gute Performance gibt folgendes:
1. in einer Hilfsspalte (E) die Werte aus Spalte A, B und C zu einem Begriff zusammenfassen: =A1&"-"&B1&"-"&C1
2. ganze Tabelle nach Hilfsspalte sortieren (oder eben nach Spalte A, B und C)
3. Ausgeben des Wertes aus Spalte D dann mit =Index(D:D;Vergleich("A-1-b";E:E;1))
wenn geprüft werden muss, ob die gesuchte Kombination überhaupt vorhanden ist, dann:
=Wenn(SVerweis("A-1-b";E:E;1;1)="A-1-b";index(D:D;Vergleich("A-1-b";E:E;1);"")
bei 100.000 Elementen brauchst du einen schnellen Suchalgorhytmus und den bekommst du mit Vergleich oder SVerweis, wenn die Daten aufsteigend sortiert sind.
als VBA sieht das dann in etwa so aus:
dim Zeile as long
dim Ergebnis as String
dim SuchWert as String
With AcitveSheet.UsedRange
with .columns(.columns.count + 1)
.formular1c1 = "=RC1&""-""&RC2&""-""&RC3"
.formula = .value
.EntireRow.Sort Key1:=.cells(1, 1), order1:=xlascending, header:=xlguess
end with
end with
SuchWert = "A-1-b"
Zeile = Worksheetfunction.Match(SuchWert, Range("E:E"), 1)
If Cells(Zeile, 5) = SuchWert then
Ergebnis = Cells(Zeile, 4)
Else
Ergebnis = ""
End If
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
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

Zeile per VBA mit mehreren Kriterien suchen


Schritt-für-Schritt-Anleitung

Um in Excel eine Zeile mit mehreren Kriterien zu suchen, kannst du den folgenden VBA-Code verwenden. Dieser Ansatz ist besonders effizient, wenn du mit großen Datenmengen arbeitest.

  1. Öffne deine Excel-Tabelle und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Kopiere und füge den folgenden Code ein:
Sub SucheMitMehrerenKriterien()
    Dim Zeile As Long
    Dim Ergebnis As String
    Dim SuchWert As String
    With ActiveSheet.UsedRange
        With .Columns(.Columns.Count + 1)
            .Formula1C1 = "=RC1 & ""-"" & RC2 & ""-"" & RC3"
            .Formula = .Value
            .EntireRow.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess
        End With
    End With
    SuchWert = "A-1-b"
    Zeile = WorksheetFunction.Match(SuchWert, Range("E:E"), 1)
    If Cells(Zeile, 5) = SuchWert Then
        Ergebnis = Cells(Zeile, 4)
    Else
        Ergebnis = ""
    End If
    MsgBox "Das Ergebnis ist: " & Ergebnis
End Sub
  1. Passe SuchWert an die gesuchten Kriterien an (z. B. A-1-b).
  2. Schließe den VBA-Editor und führe das Makro aus (ALT + F8).

Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich"

    • Lösung: Überprüfe, ob die Variablen richtig deklariert sind und die richtige Datentypen haben.
  • Fehler: "Nichts gefunden"

    • Lösung: Stelle sicher, dass die gesuchten Werte tatsächlich in der Tabelle vorhanden sind und die Hilfsspalte korrekt befüllt ist.
  • Fehler: "Index außerhalb des Bereichs"

    • Lösung: Überprüfe die Zeilenanzahl in deiner Tabelle. Möglicherweise ist die gesuchte Zeile nicht vorhanden.

Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch die Funktionen SVERWEIS oder INDEX zusammen mit VERGLEICH nutzen:

  1. Füge eine Hilfsspalte ein, die die Kriterien zusammenfasst:
    =A1 & "-" & B1 & "-" & C1
  2. Suche dann mit INDEX und VERGLEICH:
    =INDEX(D:D;VERGLEICH("A-1-b";E:E;0))

Diese Methode ist einfach und erfordert kein Programmieren, kann aber bei großen Datenmengen langsamer sein.


Praktische Beispiele

Angenommen, du hast folgende Daten:

Spalte A Spalte B Spalte C Spalte D
Wert A Wert 1 Wert a Ausgabe1
Wert A Wert 1 Wert b Ausgabe2
Wert B Wert 2 Wert c Ausgabe3

Um die Zeile zu finden, in der Spalte A = Wert A, Spalte B = Wert 1 und Spalte C = Wert b ist, kannst du die oben genannten Methoden anwenden.


Tipps für Profis

  • Verwende Option Explicit: Diese Anweisung zwingt dich, alle Variablen zu deklarieren, was hilft, Fehler zu vermeiden.
  • Optimierung: Sortiere deine Daten vor dem Suchen, um die Leistung zu verbessern.
  • Hilfsspalten: Reduziere die Anzahl der Berechnungen in der Haupttabelle, indem du Hilfsspalten nutzt, um die Daten zu aggregieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Kriterien in einer Formel kombinieren? Du kannst die Kriterien in einer Hilfsspalte kombinieren, indem du sie mit & verknüpfst, wie im Beispiel gezeigt.

2. Was ist der Vorteil von VBA gegenüber Formeln? VBA kann schneller sein, insbesondere bei großen Datenmengen, da es die Berechnungen im Hintergrund ausführt und weniger Ressourcen benötigt.

3. Kann ich diese Methode auch für andere Excel-Versionen nutzen? Ja, dieser VBA-Code und die Excel-Funktionen sind in den meisten modernen Excel-Versionen verfügbar. Achte darauf, dass die Version VBA unterstützt.

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