Zeilen mit Inhalt kopieren

Nur Zeilen mit einem beliebigen Inhalt kopieren

Die Aufgabe ist klar: Es sollen ausschließlich Zeilen in ein anderes Tabellenblatt kopiert werden, die irgend einen Inhalt haben. Das können Werte oder Formeln sein. Prinzipiell gibt es zwei Wege: „Zu Fuß“ oder per VBA bzw. Makro. Für beide Wege finden Sie eine Lösung in dieser Muster-Mappe.

Ohne VBA

Bezogen auf das Arbeitsblatt Tabelle1 der Muster-Mappe fügen Sie vor der Spalte A eine neue Spalte ein. Das geht am einfachsten, wenn Sie die komplette Spalte A markieren und dann per Rechtsklick den Punkt Zellen einfügen. Fügen Sie nun in A1 diese Formel ein: =ANZAHL2(B1:XFD1)

Damit Sie wissen, welches die letzte Zeile ist, einfach einmal die Tastenkombination StrgEnde nutzen und die letzte Zelle unten|rechts ist markiert. Kopieren Sie nun die Formel aus A1 bis zur letzten Zeile hinunter. Das kann auch durch ziehen passieren. Jetzt filtern Sie per AutoFilter alle Werte aus Spalte A, welche keine Null enthalten, indem Sie das Häkchen bei der Null entfernen.

Jetzt markieren Sie den gefilterten Bereich und kopieren ihn beispielsweise mit der Tastenkombination StrgC. Sollte in A1 eine Null stehen, dann markieren Sie nicht diese erste Zeile für das kopieren. Nun wechseln Sie in die Ziel-Tabelle und fügen den Inhalt der Zwischenablage an gewünschter Position ein. Anschließend können Sie noch den AutoFilter aus der Tabelle1 entfernen. In Tabelle1 (2) sind schon das einfügen der Spalte und der AutoFilter realisiert, falls Sie sich auf das kopieren konzentrieren wollen. Beachten Sie bitte den Hinweis am Ende dieses Beitrages.

Mit VBA/Makro

Unter der Voraussetzung, dass alle Zeilen mit beliebigem Inhalt von Tabelle1 in die jeweils erste Zeile der Tabelle2 kopiert werden sollen, geht das prima mit einem Makro. Zum ausprobieren einfach einmal AltF8 und das einzige Makro in der Auflistung ausführen. Hier nun der unkommentierte Code:

Option Explicit

Sub NurMitInhaltKopieren()
'Nur Zellen mit Inhalt in ein anderes Blatt kopieren
   Dim lRowSrc As Long, fFreeDst As Long
   Dim lColSrc As Integer
   Dim wksSrc As Worksheet, wksDst As Worksheet
   Dim ZeSrc As Long, ZeDst As Long
   Dim rngZe As Range
   
   With ActiveWorkbook
      Set wksSrc = .Sheets("Tabelle1")
      Set wksDst = .Sheets("Tabelle2")
   End With
   With wksSrc
      lRowSrc = .Cells.Find(What:="*", SearchOrder:=xlByRows, _
       SearchDirection:=xlPrevious).Row
      lColSrc = .Cells.Find(What:="*", SearchOrder:=xlByColumns, _
       SearchDirection:=xlPrevious).Column
   End With
   
   [expand title="'Mehr|weniger Code"]With wksDst
      If WorksheetFunction.CountA(.Cells) = 0 Then
         fFreeDst = 1
      Else
         fFreeDst = .Cells.Find(What:="*", SearchOrder:=xlByRows, _
          SearchDirection:=xlPrevious).Row + 1
      End If
   End With
   On Error GoTo ErrorHandler
   With wksSrc
      For ZeSrc = 1 To lRowSrc
         Set rngZe = .Range(.Cells(ZeSrc, 1), .Cells(ZeSrc, lColSrc))
         If WorksheetFunction.CountA(rngZe) > 0 Then
            rngZe.Copy wksDst.Cells(fFreeDst, 1)
            fFreeDst = fFreeDst + 1
         End If
      Next ZeSrc
   End With
ErrorHandler:
   If Err.Number <> 0 Then
      MsgBox "Fehler Nummer: " & Err.Number & vbCrLf _
       & "Fehler: " & Err.Description
   End If
End Sub[/expand]

Den Original-Code finden Sie natürlich auch in der Muster-Datei.

Hinweis: Ist Ihnen aufgefallen, dass in beiden vorgestellten Versionen eine Zeile mit kopiert worden ist, die scheinbar doch leer ist? Die Betonung liegt auf „scheinbar“, denn die Zeile ist in der Tat nicht leer. Schauen Sie sich doch einmal in der Editierzeile den Inhalt von F3 an …

[NachObenLetzte Verweis=”T&T: Belegte Zeilen kopieren”]

Dieser Beitrag wurde unter Mit VBA/Makro, Musterlösungen, Ohne Makro/VBA abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.