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

Forumthread: VBA: Prüfen von Werten auf Vorhandensein

VBA: Prüfen von Werten auf Vorhandensein
04.09.2019 15:03:03
Werten
Hallo Excel-Freunde,
ich möchte zwei Listen miteinander vergleichen, eine Quell- und eine Zielliste. In der Quellliste soll für jede Zeile abgefragt werden, ob der Eintrag in der Zielliste vorhanden ist. Wenn ja, alles gut, wenn nein, dann soll der Eintrag am Ende der Zielliste als Zeile eingefügt werden (den Teil habe ich noch nicht).
Folgenden Code habe ich dazu bisher:
Sub Liste_aktualisieren()
Dim oZelle As Object
Dim rQuellliste As Range
Dim rZielliste As Range
Set rQuellliste = Worksheets("Tabelle_1").Range("F2:F36")
For Each oZelle In rQuellliste
Set rZielliste = Worksheets("Tabelle_2").Range("B:B").Find(rQuellliste, LookIn:=xlValues,   _
_
LookAt:=xlWhole)
If rZielliste Is Nothing Then
MsgBox "Wert ist nicht vorhanden!"
Else
End If
Next
End Sub

Ich habe folgendes Problem: die Schleife wird nicht korrekt durchlaufen, d.h. bei jedem Makro-Durchlauf wird immer nur die erste Zelle der Quellliste geprüft (also F2).
Ihr erkennt mit eurem geübten Auge bestimmt gleich, woran das liegen könnte?
Vielen Dank!
Nitokris
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Prüfen von Werten auf Vorhandensein
04.09.2019 15:14:05
Werten
Hallo,
diese Zeile so:
Set rZielliste = Worksheets("Tabelle_2").Range("B:B").Find(oZelle, LookIn:=xlValues, LookAt:=xlWhole)

Du suchst doch nach dem Wert in der jeweiligen Zelle. Du kannst nicht nach einem Bereich suchen.
Gruss Torsten
AW: VBA: Prüfen von Werten auf Vorhandensein
04.09.2019 15:44:20
Werten
Hallo Torsten,
danke erst mal. Deine Argumentation klingt schlüssig ;), nur leider ändert sich bei mir nichts am Ergebnis, wenn ich den Code entsprechend anpasse, d.h. es wird nach wie vor bei jedem Schleifenschritt nur F2 überprüft.
Anzeige
AW: VBA: Prüfen von Werten auf Vorhandensein
04.09.2019 15:58:51
Werten
... ich korrigiere mich, die Schleife wird korrekt durchlaufen. Mein Fehler. Danke noch mal für deine Hilfe!
gerne...
05.09.2019 08:42:18
Torsten
gerne...
05.09.2019 08:42:26
Torsten
Anzeige
AW: VBA: Prüfen von Werten auf Vorhandensein
04.09.2019 15:30:49
Werten
HI
das kannst du auch so machen:
1. kopiere die Quellliste und füge sie unterhalb der Zielliste ein
2. führe mit der ganzen Tabelle die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN und verwende die Spalte mit dem ID-Begriff als Kriterium
das setzt voraus, dass beide Tabellen die gleiche Spaltenreihenfolge haben und der ID-Begriff innerhalb einer Tabelle nur 1x vorkommt.
Gruß Daniel
Anzeige
AW: VBA: Prüfen von Werten auf Vorhandensein
04.09.2019 15:42:33
Werten
Hallo Daniel,
vielen Dank für deine Antwort. Die Variante über die Excel-Bordmittel möchte ich nicht nutzen, da das Prozedere 1) sehr häufig, 2) nicht von mir durchgeführt wird und ich 3) ja im Folgeschritt auch jeweils noch die fehlenden Zeilen automatisch in der Zielliste ergänzen möchte. Für die Summe dieser Tätigkeiten möchte ich dem Benutzer eine einfache "1-Klick-Lösung" an die Hand geben.
Viele Grüße
Nitokris
Anzeige
AW: VBA: Prüfen von Werten auf Vorhandensein
04.09.2019 15:53:48
Werten
Alle "Excelbordmittel" kannst du immer auch per Makro ausführen lassen, wenn eine "1-Klick-Lösung" für den Anwender gefordert ist.
Solche Lösungen sind dann häufig sehr schnell und kommen mit weniger Code aus als "richtige" VBA-Makros.
Außerdem hast du den Vorteil, dass du vorher manuell ausprobieren kannst, was das Makro tun soll und dir der Recorder bei der Erstellung des Codes mehr helfen kann.
Und zu deinem Punkt 3)
Genau das macht mein Vorschlag, nur dass zuerst alle Zeilen rüberkopiert werden und dann die nicht benötigten gelöscht werden.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Werte in Excel mit VBA prüfen und aktualisieren


Schritt-für-Schritt-Anleitung

Um in Excel zu prüfen, ob ein Wert in einer Zelle vorhanden ist, kannst Du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du das umsetzen kannst:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" und wähle "Einfügen" > "Modul".
  3. Füge den folgenden Code ein:

    Sub Liste_aktualisieren()
       Dim oZelle As Range
       Dim rQuellliste As Range
       Dim rZielliste As Range
       Set rQuellliste = Worksheets("Tabelle_1").Range("F2:F36")
    
       For Each oZelle In rQuellliste
           Set rZielliste = Worksheets("Tabelle_2").Range("B:B").Find(oZelle.Value, LookIn:=xlValues, LookAt:=xlWhole)
           If rZielliste Is Nothing Then
               MsgBox "Wert '" & oZelle.Value & "' ist nicht vorhanden!"
           Else
               MsgBox "Wert '" & oZelle.Value & "' ist vorhanden."
           End If
       Next
    End Sub
  4. Führe das Makro aus:

    • Drücke F5 oder gehe auf "Run" > "Run Sub/UserForm", um das Makro auszuführen.

Dieses Makro prüft, ob Werte aus der Quellliste in der Zielliste vorhanden sind und gibt eine entsprechende Nachricht aus.


Häufige Fehler und Lösungen

  1. Problem: Die Schleife prüft nur die erste Zelle
    Lösung: Stelle sicher, dass Du in der Schleife oZelle.Value verwendest, um den Wert der aktuellen Zelle zu überprüfen. Der ursprüngliche Code verwendet die gesamte Quellliste anstelle des spezifischen Zellwerts.

  2. Problem: Falsche Bereichsangabe
    Lösung: Überprüfe, ob die Quell- und Zielliste korrekt definiert sind, z.B. Set rQuellliste = Worksheets("Tabelle_1").Range("F2:F36").


Alternative Methoden

Wenn Du keine VBA-Lösung verwenden möchtest, kannst Du auch Excel-Formeln nutzen, um zu prüfen, ob Werte vorhanden sind. Eine einfache Methode ist die Verwendung von WVERWEIS oder SVERWEIS.

Beispiel:

=WENN(ISTFEHLER(SVERWEIS(A1;Tabelle2!B:B;1;FALSCH)); "Nicht vorhanden"; "Vorhanden")

Diese Formel prüft, ob der Wert in Zelle A1 in der Spalte B der Tabelle2 vorhanden ist.


Praktische Beispiele

Angenommen, Du hast zwei Listen:

  • Quellliste (Tabelle_1): F
    Wert1
    Wert2
    Wert3
  • Zielliste (Tabelle_2): B
    Wert1
    Wert4

Wenn Du das VBA-Makro ausführst, wird eine Nachricht angezeigt, die sagt, dass "Wert2" und "Wert3" nicht vorhanden sind. Diese Werte können dann am Ende der Zielliste hinzugefügt werden.


Tipps für Profis

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in Deinem VBA-Code, um unerwartete Abbrüche zu vermeiden.
  • Optimierung: Nutze die Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual, um die Ausführungsgeschwindigkeit zu erhöhen, insbesondere bei großen Datenmengen.
  • Benutzerfreundlichkeit: Erstelle ein einfaches Formular, um die Eingaben zu erleichtern und das Makro zu starten.

FAQ: Häufige Fragen

1. Wie kann ich den VBA-Code anpassen, um fehlende Werte automatisch hinzuzufügen?
Du kannst den Else-Block deines Codes erweitern, um die fehlenden Werte in die Zielliste einzufügen.

2. Welche Excel-Version benötige ich für VBA?
VBA ist in den meisten Versionen von Excel verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Excel 365.

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