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

Forumthread: wenn Zelle nicht leer Zeile kopieren in Tabelle

wenn Zelle nicht leer Zeile kopieren in Tabelle
03.03.2016 16:34:32
Frank
Hallo!
Ich brauche noch mal Hilfe!
Ich brauche einen VBA Code.
Wenn in Tabelle3 Zellen in Spalte Q, R und S ausgefüllt sind, dann gesammte Zeile in Tabelle7 kopieren und in Tabelle1 entsprechende gesammte Zeile löschen.
Dabei sollten dann die darunter stehenden Zeilen auch eine Position nach oben rutschen um keine leere Zeile zu hinterlassen.
Bisher sieht mein Code so aus:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer
Application.DisplayAlerts = False
If Target.Column  17 Then Exit Sub
If IsEmpty(Target) Then Exit Sub
If UCase(Target.Value) >= 1 Then
With Worksheets("Order-History")
iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(Target.Row).Copy .Rows(iRow)
With Worksheets("Comparison")
Rows(Target.Row).Delete .Rows(iRow) + 4
End With
End With
End If
Application.CutCopyMode = False
Application.DisplayAlerts = True
End Sub
Ich habe es aber leider nur geschafft die Zeile aus der Tabelle3 in die Tabelle7 zu kopieren.
Wäre super wenn mir jemand beim Rest helfen könnte.
Danke!

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
03.03.2016 16:42:53
Michael
Hallo,
ungeprüft meine ich, dass es nicht möglich ist, zwei 'with' so zu vershachteln.
Mfg

AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
03.03.2016 16:45:02
Frank
Hallo, Michael Weber!
Ja, das habe ich auch schon gemerkt! :-)

AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
03.03.2016 19:08:28
Frank
Bin etwas ungeduldig da es drängt. Hat vielleicht noch jemand eine Lösung für mich?
Ich sage schon mal. . . Vielen Dank!

Anzeige
AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
04.03.2016 13:17:10
Jürgen
Hallo Frank,
kurz zum Verständnis:
-Wo prüfst du hier ob in Q,R,S etwas steht?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer
Application.DisplayAlerts = False
select case Target.Column
case 17,18,19
If IsEmpty(Target) Then Exit Sub
If not range(cells(target.row,17)) = "" and not range(cells(target.row,18)) = "" and  _
not _
range(cells(target.row,19)) = ""  Then
With Worksheets("Order-History")
iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(Target.Row).Copy
.Rows(iRow).insert shift:=xlDown
end with
With Worksheets("Comparison")
Rows(Target.Row).Delete Shift:=xlUp
End With
end if
end select
Application.CutCopyMode = False
Application.DisplayAlerts = True
End Sub

Select case prüft, ob in QRS etwas eingetragen wurde.
If not range... prüft ob alle Zellen der spalten QRS gefüllt sind.
Dann wird kopiert und eingefügt.
Das Delet im aktiven Worksheet löscht nun die ganze Zeile.
Was dies aber noch mit Tabelle 1 zu Tun hat ist mir unklar.
Gruß Jürgen

Anzeige
AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
04.03.2016 14:06:43
Frank
Gebe zu habe mich etwas undeutlich ausgedrückt!
Mein Code hatte sich bisher nur auf die Prüfung der Spalte Q bezogen. Die Erweiterung auf R und S konnte ich nicht integrieren. :-)
Tabelle 1 ist das Comparison Tabellenblatt.
Ich Teste dein Code gleich mal.
Schon jetzt vielen Dank! Ich befürchte nur das ich dem Zusammenhang des kopierens und löschens noch Probleme bekommen werde.
Es dürfen nur die Werte in den Reihen kopiert werden und nicht die dahinterliegenden Formeln.
Genauso beim löschen dürfen nur die Werte in den Zellen gelöscht werden und nicht die eigentliche Zelle. Die Zellen mit den dahinterliegenden Formeln müssen weiterhin bestehen.
Ich hoffe man versteht mich! :-)
Vielen Dank an dich Jürgen!!

Anzeige
AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
04.03.2016 14:41:11
Frank
Habe den Code von Jürgen noch etwas verändert. Ist das Plausibel?
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:=""
Dim iRow As Integer
Application.DisplayAlerts = False
Select Case Target.Column
Case 17, 18, 19
If IsEmpty(Target) Then Exit Sub
If Not Range(Cells(Target.Row, 17)) = "" And Not Range(Cells(Target.Row, 18)) = "" And  _
Not Range(Cells(Target.Row, 19)) = "" Then
With Worksheets("Order-History")
iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(Target.Row).Copy
.Rows(iRow).Insert Shift:=xlDown
ActiveWorkbook.Sheets("Comparison").Select
ActiveSheet.Unprotect Password:=""
ActiveSheet.Rows(Target.Row + 4).Delete Shift:=xlUp
End With
End If
End Select
Application.CutCopyMode = False
Application.DisplayAlerts = True
End Sub
Ich habe noch die Password-Sache mit reingebracht und beim Tabellenblatt COMPARISON die plus 4 bei (Target.Row +4) gesetzt. Das ist nötig weil im Tabellenblatt COMPARISON die Zeilen um 4 nach unten verschoben sind.
Jetzt spuckt er mir eine Fehlermeldung aus.
Laufzeitfehler 1004
Die Methode 'Range' für das Objekt '_WorkSheet' ist fehlgeschlagen.
Beim Debuggen wird diese Zeile makiert:
If Not Range(Cells(Target.Row, 17)) = "" And Not Range(Cells(Target.Row, 18)) = "" And Not Range(Cells(Target.Row, 19)) = "" Then

Anzeige
AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
04.03.2016 15:00:38
Frank
So gibt es keine Fehlermeldung mehr!!!
Jetzt habe ich nur immer noch das Problem das er die Zellen mit hinterlegter Formel kopiert...
Er soll mir nur die Werte aus den Zellen kopieren!!!
Wie mache ich das?
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="leonardtony!1"
Dim iRow As Integer
Application.DisplayAlerts = False
Select Case Target.Column
Case 17, 18, 19
If IsEmpty(Target) Then Exit Sub
If UCase(Cells(Target.Row, 17)) >= 1 And UCase(Cells(Target.Row, 18)) >= 1 And UCase( _
Cells(Target.Row, 19)) >= 1 Then
With Worksheets("Order-History")
iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(Target.Row).Copy
.Rows(iRow).Insert Shift:=xlDown
ActiveWorkbook.Sheets("Comparison").Select
ActiveSheet.Unprotect Password:="leonardtony!1"
ActiveSheet.Rows(Target.Row + 4).Delete Shift:=xlUp
End With
End If
End Select
Application.CutCopyMode = False
Application.DisplayAlerts = True
End Sub

Anzeige
AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
07.03.2016 15:29:35
Jürgen
Hallo Frank,
nach dem
.rows(iRow).insert shift:=xldown

einfach noch
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Gruß
Jürgen

Anzeige
AW: wenn Zelle nicht leer Zeile kopieren in Tabelle
07.03.2016 16:05:07
Frank
Vielen Dank! Funktioniert super!

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen kopieren in Excel, wenn Zelle nicht leer ist


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem Arbeitsblatt, in dem Du den VBA-Code einfügen möchtest.

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

  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“.
    • Wähle „Einfügen“ und dann „Modul“.
  4. Kopiere den folgenden VBA-Code in das Modul:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim iRow As Integer
       Application.DisplayAlerts = False
       Select Case Target.Column
           Case 17, 18, 19
               If IsEmpty(Target) Then Exit Sub
               If Not IsEmpty(Range(Cells(Target.Row, 17))) And Not IsEmpty(Range(Cells(Target.Row, 18))) And Not IsEmpty(Range(Cells(Target.Row, 19))) Then
                   With Worksheets("Order-History")
                       iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                       Rows(Target.Row).Copy
                       .Rows(iRow).Insert Shift:=xlDown
                   End With
                   With Worksheets("Comparison")
                       .Rows(Target.Row + 4).Delete Shift:=xlUp
                   End With
               End If
       End Select
       Application.CutCopyMode = False
       Application.DisplayAlerts = True
    End Sub
  5. Schließe den VBA-Editor und teste den Code, indem Du Werte in den Spalten Q, R und S eingibst.

  6. Überprüfe die Tabellen „Order-History“ und „Comparison“, um sicherzustellen, dass die Zeilen korrekt kopiert und gelöscht wurden.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 1004

    • Lösung: Überprüfe, ob der Bereich korrekt referenziert wird. Vermeide es, leere Zellen zu kopieren.
  • Fehler: Die Methode 'Range' für das Objekt '_WorkSheet' ist fehlgeschlagen

    • Lösung: Stelle sicher, dass der Code nur auf ausgefüllte Zellen zugreift. Achte darauf, dass der Arbeitsblattname korrekt ist.
  • Problem: Formeln werden mitkopiert

    • Lösung: Füge nach dem Kopieren folgende Zeile hinzu:
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Alternative Methoden

  1. Excel-Formeln nutzen: Du kannst die Funktion WENN verwenden, um Werte in einer neuen Spalte zu übernehmen, wenn eine Zelle nicht leer ist:

    =WENN(A1<>"", A1, "")
  2. Power Query: Nutze Power Query, um Daten zu transformieren und nur die nicht leeren Zeilen in eine neue Tabelle zu laden.


Praktische Beispiele

  • Beispiel 1: Angenommen, Du hast eine Tabelle, in der Du nur die Zeilen kopieren möchtest, wenn in Q, R und S ein Wert steht. Der obige VBA-Code erfüllt diese Funktionalität.

  • Beispiel 2: Wenn Du Werte aus einer leeren Tabelle kopieren möchtest, kannst Du den Code so anpassen, dass er nur in leere Zellen einfügt.


Tipps für Profis

  • Nutze Application.ScreenUpdating = False, um Bildschirmflimmern während des Kopierens zu vermeiden.

  • Schütze Deine Arbeitsblätter, um ungewollte Änderungen zu verhindern, bevor Du den Code ausführst.

  • Verwende benannte Bereiche, um Deine Formeln und VBA-Referenzen klarer und leichter wartbar zu gestalten.


FAQ: Häufige Fragen

1. Wie kann ich den VBA-Code anpassen, um nur bestimmte Spalten zu kopieren? Du kannst die Select Case-Anweisung anpassen, um nur die Spalten anzugeben, die Du benötigst.

2. Was mache ich, wenn ich die Werte in eine andere Tabelle kopieren möchte? Ändere den Namen in Worksheets("Order-History") und Worksheets("Comparison") zu dem gewünschten Tabellennamen.

3. Wie kann ich sicherstellen, dass nur die Werte und nicht die Formeln kopiert werden? Verwende die PasteSpecial-Methode, um nur die Werte zu kopieren, wie im Abschnitt „Häufige Fehler und Lösungen“ beschrieben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige