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

Forumthread: Zeilen kopieren wenn bestimmte Werte vorhanden sin

Zeilen kopieren wenn bestimmte Werte vorhanden sin
30.10.2006 14:02:31
Kai
Hallo,
ich habe zwar schon ein wenig im Archiv gesucht und auch teilweise Beiträge gefunden, jedoch lösen diese nicht zu 100% meine Frage.
Ich einem Tabellenblatt habe ich mehrere Konfigurationsmöglichkeiten für Serversysteme aufgelistet. Die Spalten gehen von A bis I, wobei die Spalten C bis F ausgeblendet sind. Nun möchte ich gerne, dass wenn in Spalte G ein Wert größer als 0 hinterlegt wird, Excel nach den anklicken eines Buttons die Zeilen durchsucht und falls in Spalte G ein Wert größer als 0 vorhanden ist, diese Zeile in ein neues Tabellenblatt kopiert werden. Dabei sollen die eingefügten Zeilen jedoch nicht ab Zeile 1 eingefügt werden sondern erst ab Zeile 13.
Bzgl. den ausgeblendeten Zeilen gäbe es zwei Möglichkeiten: entweder sie werden mitkopiert, müssen dann aber wieder ausgeblendet werden oder sie werden nicht mitkopiert. Jenachdem was einfacher wäre.
Gibt es hierfür eine Möglichkeit dies mit einem Makro zu erledigen?
Schon mal vielen Dank im voraus.
Gruß
Kai
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen kopieren wenn bestimmte Werte vorhanden sin
30.10.2006 14:47:48
Stefan
Hallo Kai,
du must hierzu eine Schleife programmieren (hoffe du kannst ein wenig VBA, den ich habs auch nur so mittelmäßig drauf)
dim i as string
dim h as string
sheets ("tabelle1").activate
for I=1 to 10000(würde bis zeile 10000 arbeiten, es gibt auch auch eine Funktion, die anch der letzten beschriebenen Zelle sucht)
if cells(7,1)="G"then
rows (1:1).copy
sheets ("tabelle2").activate
for H=13 to 10000 (funktion wie oben)
selection. paste
end if
next i
next H
Für das rüberkopieren ist es am besten, es mit dem Makrorecorder aufzuzeichnen und dann zu ändern
Wahrscheinlich must du am Makro noch etwas ändern, da ich es nicht probiert habe aus Zeitgründen, hoffe aber doch, dir geholfen zu haben.
Gruß
Stefan
Anzeige
AW: Zeilen kopieren wenn bestimmte Werte vorhanden sin
30.10.2006 15:38:44
IngGi
Hallo Kai, hallo Stefan,
ich hab mal ein Makro gebaut, das ein neues Tabellenblatt "Ziel" erstellt und die relevanten Zeilen aus dem Tabellenblatt "Quelle" dort hinein kopiert. Die Tabellenblattnamen musst du eben anpassen. Falls die Daten in ein bereits vorhandenes Tabellenblatt kopiert werden sollen, musst du einfach die beiden Zeilen nach der Variablendeklaration (Dim ...) löschen. Stefan, mit den Schleifen hast du völlig recht. Aber wenn du die zwei Schleifen so inneinander schachtelst wie bei dir, werden alle relevanten Zeilen 10000 mal in das andere Tabellenblatt rüberkopiert, wobei jede neu zu kopierende Zeile die 10000 Kopien der Vorgängerzeile überschreibt. Schau dir das noch mal genau an.


Sub Zeilen_kopieren()
Dim Zeile As Long
Worksheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Ziel"
With Sheets("Quelle")
   For Zeile = 1 To .Range("G65536").End(xlUp).Row
      If .Cells(Zeile, 7) > 0 Then
         .Cells(Zeile, 7).EntireRow.Copy
         If Sheets("Ziel").Range("A13") = "" Then
            Sheets("Ziel").Range("A13").PasteSpecial Paste:=xlPasteAll
         Else
            Sheets("Ziel").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll
         End If
      End If
   Next 'Zeile
End With
End Sub


Gruß Ingolf
Anzeige
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
30.10.2006 17:01:19
Kai
Hallo Ingolf,
super. Dein Makro fuktioniert soweit bei mir. Jetzt noch eine Sache. Ich habe dem Makro noch folgende Zeilen hinzugefügt
Sheets("Auftrag").Select
Columns("C:F").Select
Selection.EntireColumn.Hidden = True
Range("A1").Select
Ich möchte nämlich, dass im Zielblatt die Spalten ausgeblendet werden und Excel in eine beliebige Zelle springt (in diesem Fall habe ich jetzt einfach mal A1 genommen). Beim Ausführen erhalte ich nun folgende Meldung:
Laufzeitfehler 1004
Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden.
und er markiert die Zeile
Columns("C:F").Select
Was müsste ich hier noch ändern?
Nochmal danke und einen schönen Abend noch.
Gruß
Kai
Anzeige
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
30.10.2006 17:19:38
Kai
Hallo,
ferner bräuchte ich noch die Möglichkeit, dass das "Quelltabellenblatt" und weitere Tabellenblätter bis auf das "Zieltabellenblatt" ohne Abfrage gelöscht werden.
Gruß
Kai
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
30.10.2006 17:33:54
IngGi
Hallo Kai,
alle Tabellenblätter mit Ausnahme von "Auftrag"? Dann so:
Dim wks As Worksheet
For Each wks In ActiveWorkbook.Worksheets
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True
Next 'wks
Gruß Ingolf
Anzeige
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
30.10.2006 17:29:42
IngGi
Hallo Kai,
versuch' mal folgendes an Stelle der vier Zeilen:
With Sheets("Auftrag")
.Columns("C:F").EntireColumn.Hidden = True
.Activate
.Range("A1").Select
End With
Gruß Ingolf
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
30.10.2006 17:36:37
Kai
Hi,
danke nochmal für die schnelle Hilfe.
Es klappt nun soweit alles wie es soll ;o)
Gruß
Kai
Anzeige
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
02.11.2006 15:05:42
Kai
Hi,
ich muss jetzt doch noch einmal stören, da sich noch eine Änderung ergeben hat. Da in der ersten Spalte noch ein Text hinterlegt ist, welcher nicht mitkopiert werden soll, liegt der Bereich nicht A bis I sondern B bis H. Wie müsste ich das Makro ändern?
Vielen Dank im voraus.
Gruß
Kai
Anzeige
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
03.11.2006 07:40:41
Kai
Hatte vergessen die Frage noch als offen zu kennzeichnen.
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
03.11.2006 10:56:29
IngGi
Hallo Kai,
bezogen auf mein ursprüngliches Makro würde das dann so aussehen:


Sub Zeilen_kopieren()
Dim Zeile As Long
Worksheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Ziel"
With Sheets("Quelle")
   For Zeile = 1 To .Range("G65536").End(xlUp).Row
      If .Cells(Zeile, 7) > 0 Then
         .Range(.Cells(Zeile, 2), .Cells(Zeile, 8)).Copy
         If Sheets("Ziel").Range("B13") = "" Then
            Sheets("Ziel").Range("B13").PasteSpecial Paste:=xlPasteAll
         Else
            Sheets("Ziel").Range("B65536").End(xlUp).Offset(1, 0) _
               .PasteSpecial Paste:=xlPasteAll
         End If
      End If
   Next 'Zeile
End With
End Sub


Die Namen der Tabellenblätter musst du natürlich wieder anpassen.
Gruß Ingolf
Anzeige
AW: Zeilen kopieren wenn bestimmte Werte vorhanden
03.11.2006 11:27:45
Kai
Hallo Ingolf,
danke nochmal. Hab die Zellen im Code noch etwas angepasst. Hab' mich da wohl blöd ausgedrückt. Aber es funktioniert und mittlerweile denke ich, verstehe ich auch ein wenig von dem Code.
Wünsch dir noch ein schönes Wochenende.
Gruß
Kai
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zeilen kopieren, wenn bestimmte Werte vorhanden sind


Schritt-für-Schritt-Anleitung

Um Zeilen in Excel zu kopieren, wenn bestimmte Werte in Spalte G vorhanden sind, kannst du das folgende VBA-Makro verwenden. Dieses Makro erstellt ein neues Tabellenblatt und kopiert die relevanten Zeilen ab Zeile 13:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code ein:
Sub Zeilen_kopieren()
    Dim Zeile As Long
    Worksheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Ziel"
    With Sheets("Quelle")
        For Zeile = 1 To .Range("G65536").End(xlUp).Row
            If .Cells(Zeile, 7) > 0 Then
                .Range(.Cells(Zeile, 2), .Cells(Zeile, 8)).Copy
                If Sheets("Ziel").Range("B13") = "" Then
                    Sheets("Ziel").Range("B13").PasteSpecial Paste:=xlPasteAll
                Else
                    Sheets("Ziel").Range("B65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll
                End If
            End If
        Next
    End With
End Sub
  1. Ändere die Namen der Tabellenblätter „Quelle“ und „Ziel“ entsprechend deiner Excel-Datei.
  2. Schließe den VBA-Editor und kehre zu Excel zurück.
  3. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.

Häufige Fehler und Lösungen

1. Laufzeitfehler 1004:
Wenn du beim Ausführen des Makros die Fehlermeldung erhältst, dass die Select-Methode nicht ausgeführt werden konnte, stelle sicher, dass das Arbeitsblatt, auf das du zugreifen möchtest, aktiv ist. Du kannst die Verwendung von .Select vermeiden, indem du den Code so anpasst:

With Sheets("Auftrag")
    .Columns("C:F").EntireColumn.Hidden = True
    .Range("A1").Select
End With

2. Zeilen werden nicht korrekt kopiert:
Wenn du das Resultat nicht erwartest, überprüfe, ob die Bedingung in der If-Anweisung korrekt ist. Stelle sicher, dass die richtige Spalte angesprochen wird und dass die Werte tatsächlich größer als 0 sind.


Alternative Methoden

Eine andere Möglichkeit, um Zeilen zu kopieren, ist die Verwendung von AutoFilter. Hierbei kannst du zuerst den Filter auf Spalte G anwenden und dann die sichtbaren Zeilen kopieren. Dies erfordert jedoch manuelle Schritte, die nicht so effizient sind wie ein Makro.


Praktische Beispiele

Hier ist ein Beispiel für ein einfaches Makro, das auch ausgeblendete Spalten kopiert:

Sub Zeilen_kopieren_mit_ausgeblendeten()
    Dim Zeile As Long
    Worksheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Ziel"
    With Sheets("Quelle")
        For Zeile = 1 To .Range("G65536").End(xlUp).Row
            If .Cells(Zeile, 7) > 0 Then
                .Rows(Zeile).Copy
                Sheets("Ziel").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll
            End If
        Next
    End With
End Sub

Tipps für Profis

  • Verwende die Application.DisplayAlerts = False-Anweisung, um Warnmeldungen während des Löschens von Arbeitsblättern zu unterdrücken.
  • Überlege, das Makro so zu gestalten, dass es die Möglichkeit bietet, zwischen verschiedenen Quell- und Zielblättern zu wählen, um die Flexibilität zu erhöhen.
  • Nutze die With-Anweisung, um den Code übersichtlicher zu gestalten und die Performance zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um nur bestimmte Spalten zu kopieren?
Du kannst den Bereich in der Range-Methode anpassen, um nur die gewünschten Spalten zu kopieren. Zum Beispiel:

.Range(.Cells(Zeile, 2), .Cells(Zeile, 8)).Copy

2. Wie kann ich sicherstellen, dass das Zielblatt immer neu ist?
Du kannst vor dem Hinzufügen eines neuen Blattes sicherstellen, dass das alte Zielblatt gelöscht wird:

Application.DisplayAlerts = False
On Error Resume Next
Sheets("Ziel").Delete
On Error GoTo 0
Application.DisplayAlerts = True

Das sorgt dafür, dass immer ein frisches Zielblatt vorhanden ist.

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