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

Forumthread: Nicht-leere Zellen kopieren

Nicht-leere Zellen kopieren
27.08.2007 07:28:17
Ralf
Hallo an alle.
Ich plage mich gerade mit den Heldentaten meines Vorgängers. :) Und zwar hat jener eine wenig brauchbare Tabelle entworfen, in der alle Mitarbeiter je nach Arbeitsstelle in einer Zeile stehen, anstatt in einer Spalte. Mittlerweile gibt es mehr Mitarbeiter als Spalten, daher: Problem. ;)
Ich habe mich gerade an VBA versucht, die die Mitarbeiter aus der alten Datei in die neue kopieren soll. Das ganze sieht wie folgt aus:

Sub Transfer()
Dim n As Integer                                    'Spalte
Dim m As Integer                                    'Zeile
Dim r As Integer                                    'Lauf-Index für Zieldatei
Application.ScreenUpdating = False
r = 5
For m = 4 To 208 Step 1                             'Zeilen 4 bis 208
For n = 20 To 49 Step 1                      'Spalten T bis AW
Workbooks("Head Count Report OLD.xls").Activate
Sheets("Headcount").Activate
If Cells(m, n)  "" Then                     'Falls Zelle NICHT leer
Cells(m, n).Copy                              'kopieren und
Windows("Head Count NEW.xls").Activate
Sheets("Headcount").Activate
Cells(r, 4).PasteSpecial                   'in "NEW" unterhalb D5 eintragen
n = n + 1
r = r + 1
Else
n = n + 1
End If
Next n
m = m + 1
Next m
End Sub


Amüsanter - und mir leider unverständlicherweise, werden allerdings wahlfrei irgendwelche Werte übernommen. (Ich kann jedenfalls kein Muster erkennen.) Wie es eigentlich funktionieren sollte war: Ab Zeile 4 von Spalte T bis AW jede Zelle durchgrasen. Wenn sie einen Namen enthält, soll dieser kopiert werden und in Datei "Head Count NEW.xls" ab Spalte D5 eingefügt werden. Naja, leider kommt aber nur ein viertel der Daten an... :(
Weiß jemand Rat? Die besten Grüße aus Japan,
Ralf

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nicht-leere Zellen kopieren
27.08.2007 07:46:00
Coach
Hallo Ralf,
Du solltest die
m=m+1 und n=n+1 löschen, da Du schon For m und For n-Schleifen benutzt.
Statt .Copy .. wäre besser/schneller:
Windows("Head Count NEW.xls").Sheets("Headcount").Cells(r, 4).value = cells(m,n).value
Also ungefähr so:
Application.ScreenUpdating = False
Workbooks("Head Count Report OLD.xls").Activate
Sheets("Headcount").Activate
r = 5
For m = 4 To 208 Step 1
For n = 20 To 49 Step 1
If Cells(m, n) "" Then
Windows("Head Count NEW.xls").Sheets("Headcount").Cells(r, 4).value = cells(m,n).value
r = r + 1
End If
Next n
Next m
Application.ScreenUpdating = True
Außerdem verstehe ich nicht, warum jetzt alle Werte untereinander stehen sollen, müßten die Werte nicht eher in Zeilen angeordnet werden.
Gruß Coach

Anzeige
AW: Nicht-leere Zellen kopieren
27.08.2007 07:58:00
Ralf
Hm... der Code sieht soweit schonmal wesentlich besser aus als meiner und ist auch verständlicher. Danke soweit.
Allerdings erscheint folgende Fehlermeldung bei der Ausführung von:
Windows("Head Count NEW.xls").Sheets("Headcount").Cells(r, 4).Value = Cells(m, n).Value
Runtime Error '438':
Object doesn't support this property or method
Woran könnte das liegen?
Achso... bezüglich deiner Frage: Die Mitarbeiter stehen jetzt untereinander, da es nicht genug Spalten gibt. Bisher ist es ja so, das alle Mitarbeiter (eines Geschäftsbereiches) nebeneinander in einer Zeile stehen. Das reicht mittlerweile nicht mehr aus... :(

Anzeige
AW: Nicht-leere Zellen kopieren
27.08.2007 09:14:05
Beverly
Hi ralf,
versuche es mal hiermit

Sub Transfer()
Dim n As Integer                                    'Spalte
Dim m As Integer                                    'Zeile
Dim r As Integer
r = 5
Application.ScreenUpdating = False
For m = 4 To 208                             'Zeilen 4 bis 208
For n = 20 To 49                      'Spalten T bis AW
With Workbooks("Head Count Report OLD.xls").Worksheets("Headcount")
If .Cells(m, n)  "" Then                     'Falls Zelle NICHT leer
.Cells(m, n).Copy                              'kopieren und
Workbooks("Head Count NEW.xls").Worksheets("Headcount").Cells(r, 4). _
PasteSpecial Paste:=xlValues                   'in "NEW" unterhalb D5 eintragen
r = r + 1
End If
End With
Next n
Next m
Application.ScreenUpdating = True
End Sub


________________________________________

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Nicht-leere Zellen in Excel kopieren


Schritt-für-Schritt-Anleitung

Um in Excel nicht-leere Zellen zu kopieren, kannst Du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul: Rechtsklick auf "VBAProject" > Einfügen > Modul.
  3. Füge folgenden Code in das Modul ein:
Sub Transfer()
    Dim n As Integer                                    'Spalte
    Dim m As Integer                                    'Zeile
    Dim r As Integer                                    'Zielzeile für Kopie
    r = 5                                              'Startzeile für Einfügen
    Application.ScreenUpdating = False                 'Bildschirmaktualisierung ausschalten

    For m = 4 To 208                                   'Zeilen 4 bis 208
        For n = 20 To 49                               'Spalten T bis AW
            If Cells(m, n) <> "" Then                 'Wenn Zelle NICHT leer
                Workbooks("Head Count NEW.xls").Sheets("Headcount").Cells(r, 4).Value = Cells(m, n).Value 'Kopieren
                r = r + 1                              'Zielzeile erhöhen
            End If
        Next n
    Next m
    Application.ScreenUpdating = True                  'Bildschirmaktualisierung wieder einschalten
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus, um die nicht-leeren Zellen zu kopieren.

Häufige Fehler und Lösungen

  • Fehler: "Object doesn't support this property or method"

    • Überprüfe, ob die Namen der Arbeitsmappen und Blätter korrekt sind. Achte darauf, dass die Datei "Head Count NEW.xls" geöffnet ist.
  • Problem mit leeren Zellen

    • Wenn Du leere Zellen kopieren möchtest, stelle sicher, dass die Bedingung im Code (If Cells(m, n) <> "") richtig formuliert ist.

Alternative Methoden

Falls Du VBA nicht verwenden möchtest, kannst Du auch die Funktion "Spezial Einfügen" in Excel nutzen:

  1. Wähle den Bereich aus, den Du kopieren möchtest.
  2. Drücke STRG + C, um die Zellen zu kopieren.
  3. Gehe zu der Zielzelle und klicke mit der rechten Maustaste.
  4. Wähle "Inhalte einfügen" > "Nur Werte". Dies kopiert die Zellen ohne leere Zellen.

Praktische Beispiele

Angenommen, Du hast in einer Tabelle die Mitarbeiterdaten in Zeilen, und Du möchtest diese in eine Spalte übertragen. Mit dem obigen VBA-Code kannst Du sicherstellen, dass nur die nicht-leeren Zellen kopiert werden. Hier ist ein Beispiel für die Anwendung:

  • Du hast in Zeile 4 bis 208 Namen in den Spalten T bis AW.
  • Nach dem Ausführen des Codes werden die Namen ab Zelle D5 in die neue Datei eingefügt.

Tipps für Profis

  • Nutze Application.ScreenUpdating = False, um die Performance zu verbessern, besonders bei großen Datenmengen.
  • Teste den Code zuerst mit einer kleinen Datenmenge, um sicherzustellen, dass alles korrekt funktioniert.
  • Du kannst den Code anpassen, um verschiedene Bereiche zu kopieren, indem Du die Zeilen- und Spaltenwerte änderst.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass leere Zellen nicht kopiert werden? Um sicherzustellen, dass nur nicht-leere Zellen kopiert werden, musst Du die Bedingung im VBA-Code korrekt einstellen. Der Code sollte If Cells(m, n) <> "" Then verwenden.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen, wie Excel 2010 und später. Achte jedoch darauf, dass die Arbeitsmappen korrekt benannt sind.

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