Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-Suchen nach Wert in bestimmten Bereich

Forumthread: VBA-Suchen nach Wert in bestimmten Bereich

VBA-Suchen nach Wert in bestimmten Bereich
05.03.2015 07:42:19
Josef
Hallo zusammen,
ich benötige Hilfe bezüglich eines Problems, das ich mit meinen limitierten VBA-Kenntnissen nicht lösen kann. Deshalb wende ich mich an diesem Punkt an euch und hoffe, dass ihr mir weiterhelfen könnt.
Folgendes Problem: Ich habe in Tabellenblatt1 eine Liste mit tausenden Bestellnummern. Diese Nummern sind sortiert und wiederholen sich öfter mal. Manche kommen 10x vor, manche 2, manche 1x. Diese Bestellnr. haben eine zweite Nummer. Meist 10 oder 20 (in Spalte B). Also kann beispielsweise die Bestellnr. 1000100 drei mal untereinander stehen mit der Position 10 und 2x mit der Position 20. In Spalte D steht ein Datum. in jeder Zeile.
In Tabellenblatt2 habe ich ausgewertet wie oft jede Bestellnr vorkommt. Also steht in A2 die Bestellnr. in B2 die Position und in C3 wie oft diese Bestellnr. mit ihrer Position existiert.
Soviel zum Set-Up.
Nun ist es mein Ziel zu jeder Bestellnr. das früheste Datum aus Spalte D zu ermitteln. Das heißt er soll die erste Bestellnr. mit Position aus Tabellenblatt2 nehmen (Wäre A2, B2) und in Tabellenblatt1 nach dieser Bestellnr.(+Position) suchen und aus diesen dann das früheste Datum in D2 (Tabellenblattes2) schreiben.
Ich bedanke mich für eure Hilfe im Voraus. Hoffentlich habe ich euch alle notwendigen Informationen gegeben. Größtes Problem für mich ist, dass ich nicht weiß wie ich in dem Bestellnr.Bereich suchen lassen soll, nach dem frühesten Datum.
mit freundlichen Grüßen
Josef

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Suchen nach Wert in bestimmten Bereich
05.03.2015 09:30:46
Rudi
Hallo,
wozu VBA? Geht per Matrixformel.
{=MIN(WENN(Tabelle1!$A$2:$A$100=A2;Tabelle1!$D$2:$D$100;""))}
Gruß
Rudi

AW: VBA-Suchen nach Wert in bestimmten Bereich
05.03.2015 11:20:57
Josef
Hey,
Danke Rudi für deine schnelle Antwort.
Ich weiß nicht wie gut das mit der Matrixformel klappen wird. In Tabellenblatt1 sind da ca. 60000 Daten die man nach dem frühesten Datum durchsuchen muss (Sind ca. 6500 verschiedene Bestellnr. mitsamt Position in Tabellenblatt2). Ich weiß nicht ob das Probleme bereiten wird?!

Anzeige
AW: VBA-Suchen nach Wert in bestimmten Bereich
05.03.2015 12:01:52
Rudi
Hallo,
wenn du die Liste zusätzlich aufsteigend nach Datum sortierst, kannst du auch mit VERGLEICH() arbeiten.
Gruß
Rudi

AW: VBA-Suchen nach Wert in bestimmten Bereich
05.03.2015 12:56:24
Josef
Hi,
danke für deine Hilfe! Kannst du mir eventuell sagen, was ich machen muss, wenn unter Umständen eine Lücke ist in der Datumsspalte? Dann gibt er mir das Datum xx.xx.1900 aus. Ist es möglich die leeren Zellen zu ignorieren?
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA-Suchen nach Wert in bestimmten Bereich


Schritt-für-Schritt-Anleitung

  1. Tabellenstruktur erstellen: Stelle sicher, dass du zwei Tabellenblätter hast. In Tabellenblatt1 sollten die Bestellnummern in Spalte A, die Positionen in Spalte B und die Daten in Spalte D stehen. In Tabellenblatt2 sind die Bestellnummern in A2, die Positionen in B2 und die Häufigkeit in C2.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul hinzufügen: Klicke mit der rechten Maustaste auf VBAProject (deinDateiname), wähle Einfügen und dann Modul.

  4. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub FrühestesDatumErmitteln()
       Dim ws1 As Worksheet, ws2 As Worksheet
       Dim bestellNr As String, position As String
       Dim frühestesDatum As Date
       Dim zeile As Long, letzteZeile As Long
    
       Set ws1 = ThisWorkbook.Sheets("Tabellenblatt1")
       Set ws2 = ThisWorkbook.Sheets("Tabellenblatt2")
    
       letzteZeile = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row
    
       For zeile = 2 To letzteZeile
           bestellNr = ws2.Cells(zeile, 1).Value
           position = ws2.Cells(zeile, 2).Value
    
           frühestesDatum = Application.WorksheetFunction.MinIfs(ws1.Range("D:D"), ws1.Range("A:A"), bestellNr, ws1.Range("B:B"), position)
    
           ws2.Cells(zeile, 4).Value = frühestesDatum
       Next zeile
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle FrühestesDatumErmitteln aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: "Typkonflikt": Stelle sicher, dass die Spalten mit den Bestellnummern und Positionen die korrekten Datentypen haben. Es sollte alles als Text formatiert sein, um Konflikte zu vermeiden.

  • Fehler: "Datum xx.xx.1900": Wenn du leere Zellen in der Datumsspalte hast, kann das zu diesem Fehler führen. Um dies zu vermeiden, kannst du im Code eine Überprüfung einfügen, die leere Zellen ignoriert.


Alternative Methoden

Eine Matrixformel kann ebenfalls verwendet werden, um das früheste Datum zu ermitteln. Du kannst folgende Formel in Tabellenblatt2 verwenden:

=MIN(WENN(Tabelle1!$A$2:$A$100=A2;Tabelle1!$D$2:$D$100;""))

Um die Formel einzufügen, drücke STRG + SHIFT + ENTER, um sie als Matrixformel zu aktivieren. Diese Methode kann jedoch bei großen Datenmengen langsamer sein.


Praktische Beispiele

Nehmen wir an, dass du in Tabellenblatt2 die Bestellnummer 1000100 in Zelle A2 und die Position 10 in B2 hast. Der VBA-Code wird dann das früheste Datum der Bestellnummer 1000100 mit Position 10 aus Tabellenblatt1 abrufen und in D2 von Tabellenblatt2 einsetzen.


Tipps für Profis

  • Sortierung der Daten: Wenn du die Daten in Tabellenblatt1 nach Datum sortierst, kann das die Verarbeitungsgeschwindigkeit bei der Verwendung von Formeln oder VBA erhöhen.

  • Datenvalidierung: Achte darauf, dass deine Daten in Tabellenblatt1 und Tabellenblatt2 konsistent sind, um Fehler während der Datensuche zu vermeiden.


FAQ: Häufige Fragen

1. Wie viele Daten kann ich mit dieser Methode verarbeiten?
Die Methode ist für große Datenmengen geeignet, aber bei mehr als 100.000 Zeilen kann es zu Verlangsamungen kommen. VBA ist in der Regel schneller als Excel-Formeln bei großen Datensätzen.

2. Was mache ich, wenn ich leere Zellen in der Datumsspalte habe?
Du kannst im VBA-Code eine Überprüfung einfügen, um leere Zellen zu ignorieren oder die Daten in der Excel-Tabelle vorab bereinigen.

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