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

Kopieren, nur wenn nicht leer

Forumthread: Kopieren, nur wenn nicht leer

Kopieren, nur wenn nicht leer
30.12.2016 12:18:55
Elmar
Hallo Experten,
der nachfolgende Code kopiert mir immer den Inhalt der Spalte "S" in eine Gesamtdatei. Das klappt auch gut, aber es kopiert eben auch dann, wenn die Zellen leer sind. Genau das möchte ich verhindern, dann ist das Makro einfach schneller, weil wir hier von 20000 Zeilen reden, die geprüft werden.
Hat jemand eine Idee, was ich in den Code hier einfügen muss, damit er nur die "nicht leeren" Zellen kopiert und die anderen einfach überspringt.
Viele Grüße
Elmar
(Auszug aus dem Gesamtcode)
Dim rng As Range
For Each rng In Sheets("Entwicklung Gesamtrückstand").Range("C3:C" & Range("C20000").End(xlUp).Row)
If Sheets("RL70").Cells(rng.Row, 3) = Sheets("Entwicklung Gesamtrückstand").Cells(rng.Row, 3) And _
Sheets("RL70").Cells(rng.Row, 1) = "70" Then
Sheets("RL70").Cells(rng.Row, 19).Copy
Sheets("Entwicklung Gesamtrückstand").Cells(rng.Row, 19).PasteSpecial Paste:=xlPasteValues
End If
Next rng
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren, nur wenn nicht leer
30.12.2016 12:27:14
Hajo_Zi
es ist der falsche Code es wird nicht Spalte S kopiert sondern nur eine Zelle.
if Sheets("RL70").Cells(rng.Row, 19)"" then
Sheets("RL70").Cells(rng.Row, 19).Copy

AW: Kopieren, nur wenn nicht leer
30.12.2016 12:38:48
Elmar
Hallo Hajo,
natürlich hast Du recht... Das Makro kopiert immer den Inhalt der Zelle. Sorry, falsch geschrieben...
Das soll es aber eben nur tun, wenn die Zelle nicht leer ist. Jetzt macht es das immer und kostet unnötig Zeit, weil eben nur in bestimmten Zellen Zahlen oder auch Text drin ist.
Hast Du eine Idee?
Danke schon mal für den Hinweis
VG aus Bayern
Elmar
Anzeige
AW: Kopieren, nur wenn nicht leer
30.12.2016 18:00:14
Hajo_Zi
Hallo Elmar,
mein Borschlag gefiel Dir also nicht.
Einen anderen habe ich nicht.
Ich bin dann raus.
Gruß Hajo
AW: Kopieren, nur wenn nicht leer
30.12.2016 12:53:38
Daniel
Hi
du könntest vorher den Autofilter anwenden und nach "nicht leer" filtern.
dann kopierst du die ganze Spalte in einem Kopiervorgang
in gefilterten Tabellen werden nur die sichtbaren Zeilen bearbeitet.
Gruß Daniel
Anzeige
AW: Kopieren, nur wenn nicht leer
30.12.2016 13:03:39
Elmar
Hallo Daniel,
das funktioniert nicht, weil ich insgesamt 14 Dateien in der Art kopieren muss und außerdem habe ich viele verbundene Zellen noch drin, die ich ungern lösen möchte, sonst sieht das völlig unübersichtlich aus. Dies verhindert aber schon ein Kopieren von der ganzen Spalte.
VG
Elmar
Anzeige
AW: Kopieren, nur wenn nicht leer
30.12.2016 13:21:44
Gerd
Hallo Elmar,
ich war schon vor deiner letzten Nachricht fertig. Hoffe die Koordinaten stimmen trotz verbundener Zellen.
Sub ccc()
Dim A, B, C, D, E
Dim EG As Worksheet, RL As Worksheet
Dim rw As Long, L As Long
Set EG = Worksheets("Entwicklung Gesamtrückstand")
Set RL = Sheets("RL70")
rw = EG.Range("C20000").End(xlUp).Row
A = EG.Range("C3:C" & rw).Value
B = RL.Range("A3:A" & rw).Value
C = RL.Range("C3:C" & rw).Value
D = RL.Range("S3:S" & rw).Value
E = EG.Range("S3:S" & rw).Value
For L = 1 To UBound(A, 1)
If D(L, 1)  "" Then
If B(L, 1) = 70 Then
If C(L, 1) = A(L, 1) Then
E(L, 1) = D(L, 1)
End If
End If
End If
Next
EG.Range("S3").Resize(UBound(A, 1), 1) = E
Set EG = Nothing: Set RL = Nothing
End Sub
Gruß Gerd
Anzeige
AW: Kopieren, nur wenn nicht leer
30.12.2016 14:02:12
Elmar
Hallo Gerd,
bin ja begeistert.... DANKE
Immer wieder klasse, wie man hier Hilfe findet
VG
Elmar
;
Anzeige
Anzeige

Infobox / Tutorial

Kopieren von Zellen in Excel, nur wenn nicht leer


Schritt-für-Schritt-Anleitung

Um in Excel nur die Zellen zu kopieren, die nicht leer sind, kannst du den folgenden VBA-Code verwenden. Dieser Code überprüft jede Zelle in der angegebenen Spalte und kopiert nur die nicht leeren Zellen.

  1. Öffne dein Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und dann auf Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub KopiereNurNichtLeere()
    Dim rng As Range
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet
    Dim rowDest As Long

    Set wsSource = ThisWorkbook.Sheets("RL70")
    Set wsDest = ThisWorkbook.Sheets("Entwicklung Gesamtrückstand")
    rowDest = 3 ' Startzeile im Zielblatt

    For Each rng In wsSource.Range("S3:S20000")
        If rng.Value <> "" Then ' Überprüfen, ob die Zelle nicht leer ist
            wsDest.Cells(rowDest, 19).Value = rng.Value ' Kopiere den Wert
            rowDest = rowDest + 1 ' Nächste Zeile im Zielblatt
        End If
    Next rng
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus, um die nicht leeren Zellen zu kopieren.

Häufige Fehler und Lösungen

  • Fehler: Das Makro kopiert trotzdem leere Zellen.
    Lösung: Stelle sicher, dass die Bedingung If rng.Value <> "" Then korrekt implementiert ist.

  • Fehler: Es wird nur eine Zelle kopiert.
    Lösung: Überprüfe den Bereich, den du in For Each rng In wsSource.Range("S3:S20000") angegeben hast.


Alternative Methoden

Eine alternative Methode, um nur nicht leere Zellen zu kopieren, ist die Verwendung des Autofilters:

  1. Wende den Autofilter auf die Spalte an.
  2. Filtere nach "nicht leer".
  3. Kopiere die gefilterten Daten in die Ziel-Tabelle.

Beachte, dass diese Methode bei verbundenen Zellen möglicherweise nicht funktioniert und daher weniger geeignet ist, wenn du viele verbundene Zellen hast.


Praktische Beispiele

Angenommen, du hast in der Spalte S Daten, die zum Teil leer sind. Mit dem oben genannten VBA-Code wird nur der Inhalt der Zellen kopiert, die tatsächlich Daten enthalten. Dies ist besonders nützlich, wenn du mit großen Datenmengen arbeitest, wie in Elmar's Fall, wo es um über 20.000 Zeilen geht.


Tipps für Profis

  • Um die Geschwindigkeit des Makros zu erhöhen, kannst du die Bildschirmaktualisierung während der Ausführung deaktivieren:
Application.ScreenUpdating = False

Füge dies am Anfang deines Makros ein und setze es am Ende wieder auf True.

  • Verwende Application.Calculation = xlCalculationManual, um die Berechnung während der Ausführung des Makros zu deaktivieren und dann wieder zu aktivieren.

FAQ: Häufige Fragen

1. Wie kann ich die Zellen in eine andere Spalte kopieren?
Du kannst die Zielspalte einfach anpassen, indem du die Zahl in wsDest.Cells(rowDest, 19) änderst.

2. Was passiert mit den leeren Zellen?
Leere Zellen werden übersprungen und nicht in das Zielblatt kopiert, was die Effizienz des Makros verbessert.

3. Ist dieser Code mit allen Excel-Versionen kompatibel?
Ja, dieser VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren.

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