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

Forumthread: VBA Befehl wenn Zelle leer, nächste Zeile prüfen

VBA Befehl wenn Zelle leer, nächste Zeile prüfen
13.03.2015 11:29:24
Fetl17
Hallo
ich habe mir mal bisschen was zusammengebastelt...ich hab nur ein Problem mit folgendem Befehl:
es soll die Spalte L in Tabelle 2 mit der Spalte H der Tabelle 1 verglichen werden. Wenn die Werte übereinstimmen, sollen die werte aus Spalte I, J, und K (Tab1) in die Spalten H, I und J (Tab2) hineinkopiert werden. Ich denke das könnt Ihr aus dem Befehl herauslesen.

Sub Schaltfläche2_Klicken()
Dim rngQuelle As Range
Dim rngZiel As Range
With ThisWorkbook.Sheets("VK-Preise")
For Each rngZiel In .Range("L1:L" & .Cells(.Rows.Count, 6).End(xlUp).Row)
On Error Resume Next
If Zelle.Value  "" Then
Set rngQuelle = ThisWorkbook.Sheets("Konfiguration").Range("H:H").Find(What:=rngZiel)
On Error GoTo 0
If Not rngQuelle Is Nothing Then
rngQuelle.Offset(0, 1).Resize(1, 3).Copy
rngZiel.Offset(0, -4).Resize(1, 3).PasteSpecial Paste:=xlPasteValues
End If
End If
Next 'rngZiel
End With
End Sub

Die Problematik:
1. er läuft sehr langsam
2. wenn die Zelle in Spalte L leer ist, werden leere Zellen eingefügt, das heißt - in diesem Fall werden in den Spalten H, I und J bereits vorhandene Werte gelöscht oder die Zelle geleert
Ich würde also eine Lösung benötigen, die im Falle einer Leeren Zelle, einfach die nächste prüft und nichts tut. --> ich denke, das würde die ganze Sache auch beschleunigen.
Vielen Dank im Voraus!
Gruß Frank

Anzeige

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

Betreff
Datum
Anwender
Anzeige
VBA Befehl wenn Zelle leer, nächste Zeile prüfen
13.03.2015 11:41:13
Rudi
Hallo,
If Zelle.Value "" Then
Zelle ist nicht definiert. Soll wohl rngZiel heißen.
Geschwindigkeit: suche in der Recherche nach getmorespeed.
Gruß
Rudi

AW: VBA Befehl wenn Zelle leer, nächste Zeile prüfen
13.03.2015 12:00:26
Fetl17
Hallo Rudi,
danke! Aber mir scheint, als ob diese Befehls-Zeile gar nicht registriert wird. Es hätte ja eine Fehlermeldung folgen müssen, wenn er mit der Beschreibung nichts anfangen könnte.
Ich habs ausgebessert. Leider überschreibt er immernoch die Zielzellen mit 0 bzw. leert diese.
Irgendwie muss ich doch den Befehl so ausgeben, dass nach
If rngZiel.Value "" Then
..ein Befehl kommt, nichts zu tun und einfach die nächste Zelle in der Spalte zu prüfen. Erst wenn ein beliebiger Wert oder Zahl in einer Zelle steht, soll er diesen mit dem Wert in der Tabelle 1 vergleichen und die entsprechenden Werte aus Tabelle 1 in die Zweite kopieren.
Kannst du mir hierfür keine simple Lösung anbieten?
Gruß Frank
Anzeige
;

Forumthreads zu verwandten Themen

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 Befehl: Wenn Zelle leer, nächste Zeile prüfen


Schritt-für-Schritt-Anleitung

Hier findest du eine einfache Schritt-für-Schritt-Anleitung, um mit VBA zu prüfen, ob eine Zelle leer ist, und gegebenenfalls zur nächsten Zeile zu wechseln.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Rechtsklick auf „VBAProject (deineDatei.xlsm)“ > Einfügen > Modul.
  3. Kopiere den folgenden Code und füge ihn in das Modul ein:
Sub ZellenPruefen()
    Dim rngZiel As Range
    Dim rngQuelle As Range
    With ThisWorkbook.Sheets("VK-Preise")
        For Each rngZiel In .Range("L1:L" & .Cells(.Rows.Count, 12).End(xlUp).Row)
            If rngZiel.Value <> "" Then
                Set rngQuelle = ThisWorkbook.Sheets("Konfiguration").Range("H:H").Find(What:=rngZiel.Value)
                If Not rngQuelle Is Nothing Then
                    rngQuelle.Offset(0, 1).Resize(1, 3).Copy
                    rngZiel.Offset(0, -4).Resize(1, 3).PasteSpecial Paste:=xlPasteValues
                End If
            End If
        Next rngZiel
    End With
End Sub
  1. Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  1. Zelle ist nicht definiert: Der Fehler tritt auf, wenn du Zelle.Value anstelle von rngZiel.Value verwendest. Achte darauf, dass du den richtigen Variablennamen verwendest.

  2. Leere Zellen werden überschrieben: Wenn du die Werte in den Zielen nicht überschreiben möchtest, stelle sicher, dass du nur dann kopierst, wenn die Zelle nicht leer ist, wie im obigen Code gezeigt.

  3. Langsame Ausführung: Um die Geschwindigkeit zu erhöhen, kannst du die Application.ScreenUpdating-Eigenschaft verwenden. Setze sie vor der Schleife auf False und nach der Schleife auf True.

Application.ScreenUpdating = False
'... Dein Code ...
Application.ScreenUpdating = True

Alternative Methoden

Eine alternative Methode zur Prüfung, ob eine Zelle leer ist, könnte die Verwendung von If IsEmpty(rngZiel) Then sein. Dies kann den Code leserlicher machen:

If Not IsEmpty(rngZiel) Then
    ' Dein Code hier
End If

Praktische Beispiele

Hier sind einige Beispiele für den Einsatz des Codes:

  • Beispiel 1: Wenn in Zelle L1 von „VK-Preise“ ein Wert steht, wird der entsprechende Wert aus „Konfiguration“ in die Spalten H, I und J kopiert.
  • Beispiel 2: Der Code kann leicht angepasst werden, um andere Spalten zu überprüfen, indem du die Range-Methoden änderst.

Tipps für Profis

  • Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
  • Verwende Debug.Print zur Überwachung von Variablenwerten während der Ausführung, um die Fehlersuche zu erleichtern.
  • Erstelle eine Benutzeroberfläche (UserForm), um die Interaktion mit den Daten zu vereinfachen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der Code nur mit nicht-leeren Zellen arbeitet?
Verwende die Bedingung If rngZiel.Value <> "" Then, um sicherzustellen, dass nur nicht-leere Zellen verarbeitet werden.

2. Was mache ich, wenn ich mehrere Spalten prüfen möchte?
Du musst die Schleife anpassen, um über die gewünschten Spalten zu iterieren und die Logik entsprechend erweitern.

3. Wie kann ich den Code schneller machen?
Reduziere die Anzahl der Bildschirmaktualisierungen, indem du Application.ScreenUpdating deaktivierst, und nutze effizientere Suchmethoden.

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