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

Forumthread: ActiveCell.Row - mehrere Zeilen anwählen

ActiveCell.Row - mehrere Zeilen anwählen
Frischy1990
Guten Tag,
in meinem Makro habe ich aktuell folgenden Befehl:
lngRow = ActiveCell.Row
Das Ziel dabei ist, dass ich eine Zelle anwähle und alle Werte die in dieser Reihe stehen in eine andere Tabelle kopiert werden.
Wenn ich nun jedoch mehrere Zellen in unterschiedlichen Reihen untereinander markiere funktioniert dieser Befehl nicht.
In diesem Fall soll das Makro unterscheiden ob 1 oder mehrere Reihen gewählt wurden und anschließend bei mehreren Reihen den Prozess für jede einzelne Reihe starten.
Hat jemand eine Idee zur Umsetzung?
LG Frischy
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Selection.EntireRow
20.06.2012 09:54:19
Erich
Hi,
probier mal
Selection.EntireRow.Copy Sheets("Tabelle3").Cells(20, 1)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
AW: Selection.EntireRow
20.06.2012 10:32:14
Frischy1990
Sorry, aber es funktioniert nicht wirklich so wie ich es mir vorstelle, aber ich danke dir trotzdem für die schnelle Antwort.
Ich markiere einen Bereich und nun suche ich einen Befehl, der mir alle Spalten in diesem Bereich ausliest.
Das heißt:
wenn folgendes markiert ist (A2 : D4), oder auch (A2 :A4)... is ja egal weil mich nur die Spalte interessiert
dann soll ausgelesen werden, das Spalte 2, Spalte 3 und Spalte 4 markiert sind und dann sollen alle dieser Spalten in unterschiedliche Variablen geschrieben werden (lngrow1 = 2, lngrow2 = 3, lngrow3 = 4)
...weiterhin soll es auch funktionieren, wenn nur 1 Spalte oder auch 50 Spalten markiert sind, sodass ich danach einen Loop-Befehl für jede einzelne Spalte ablaufen lassen kann.
Ich hoffe, ich konnte mein Problem halbwegs beschreiben.
Anzeige
Spalten oder Zeilen
20.06.2012 11:12:32
Erich
Hi ,
wenn du "Spalten" oder "Reihen" schreibst, meinst du dann vielleicht Zeilen?
Spalten sind die senkrechten Dinger, über denen oben Buchstaben stehen - z. B. Spalte A
Zeilen sind die waagerechten Dinger, vor denen links Zahlen stehen - z. B. Zeile 7.
Row heißt Zeile. Spalte ist Column.
Reihen gibt es hier gar nicht.
Wenn du diese Begriffe vertauschst, macht das das Lesen nicht unbedingt leichter...
Das was du schreibst: "(lngrow1 = 2, lngrow2 = 3, lngrow3 = 4)" ist so nicht machbar.
Man weiß doch gar nicht wie viele Variablen man braucht - vielleicht lngrow4711?
Eingangs hast du geschrieben, das du die Zeilen kopieren willst.
Willst du jetzt in einem Loop (einer Schleife) mehr oder etwas anderes tun?
Wenn du nur kopieren willst, geht das mit meiner Anweisung Selection.EntireRow.Copy ...
Das gilt auch für (mit Strg) zusammengesetzte Bereiche.
Was willst du eigentlich erreichen?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Spalten oder Zeilen
20.06.2012 11:24:01
Frischy1990
Sorry, ich habe gerade den Kopf nicht wirklich frei, weil ich die ganze Zeit am probieren bin und regelrecht verzweifle.
Ich meine natürlich Zeilen.
Also folgendes, ich habe eine Tabelle in der untereinander mehrere Maschinenanlagen stehen. In den Zeilen hinter der Anlage stehen dann alle Daten zu dieser Anlage. Wenn nun das Makro gestartet wird, wird in einer anderen Excel-Datei eine Art Steckbrief dieser Anlage erstellt. Nun möchte mein Chef jedoch die Möglichkeit haben, mehrere Anlagen zu wählen und all diese sollen dann in den einzelnen Registerkarten der anderen Datei als Steckbrief erscheinen.
Kann man vllt bei einem markiertem Bereich den Index jeder Zelle die sich darin befindet auslesen?
Anzeige
das Ziel
20.06.2012 12:03:48
Erich
Hi,
ok, jetzt verstehe ich das so:
Du hast ein (funktionierendes) Makro, das für eine ausgewählte Zeile (eine Maschinenanlage) in einer anderen Mappe
einen "Steckbrief" erstellt.
Nun möchte dein Chef, dass dies auch für mehrere (auch nicht zusammenhängende) Zeilen funktioniert,
also in einer Schleife mehrere Steckbriefe angelegt werden. Habe ich das jetzt richtig verstanden?
Gibt es dabei für jede Maschinenanlage, jeden Steckbief, ein eigenes Tabellenblatt?
(So heißt das Teil, das du "Registerkarte" nennst.)
Für dich und uns wäre es praktisch, wenn wir dein jetziges Makro (in einer Beispielmappe) hätten.
Wir könnten das dann anzupasssen versuchen.
Ohne Makro und Mappe fällt uns die Hilfe und dir danach die Anpassungsarbeit viel schwerer.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: das Ziel
20.06.2012 13:07:42
Frischy1990
Hallo,
ja genau du hast es richtig verstanden!
Für den Steckbrief gibt es eine Vorlage, die für alle Anlagen gleich ist.
Allerdings würde ich die Datei ungern im Internet hochladen. Besteht die Möglichkeit dir die Datei per E-Mail zu schicken?
LG David
Profil
20.06.2012 13:50:52
Erich
Hi David,
ok, auch wenn du dabei in Kauf nehmen musst, dass nur ich helfen kann.
Meine (etwas abgewandelte) Adresse findest du bei den Profilen: https://www.herber.de/cgi-bin/profil_d.pl?value=0
(Forums-Seiten - Prfile - Profilliste)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: das Ziel
20.06.2012 16:04:34
fcs
Hallo David,
nachdem das Verwirrspiel um Zeilen/Spalten bereinigt ist und klar ist, dass die Daten der Zeile jeweils auf einem Tabellenblatt eingetragen werden sollen, hier mein modifizierte Vorschlag, den du noch ein wenig bezüglich der Dateinamen und Blattnamen und Spalten/Zelladressen anpassen muss.
Gruß
Franz
Sub CopyZeilenDaten_in_Steckbrief()
'Werte in Zeilen der selektierten Zellen in Tabellenblätter kopieren
Dim objRow
Dim wksQ As Worksheet
Dim wbkSteckbrief As Workbook, wksSteckbrief As Worksheet, wksMuster As Worksheet
Set wksQ = ActiveSheet
For Each objRow In Selection.Rows
'Zieldatei und Muster-Steckbrief festlegen
If wbkSteckbrief Is Nothing Then
Set wbkSteckbrief = Workbooks("Steckbrief.xlsx")
Set wksMuster = wbkSteckbrief.Worksheets("Muster")
End If
'Mustersteckbrief kopieren
With wbkSteckbrief
wksMuster.Copy after:=.Sheets(.Sheets.Count)
Set wksSteckbrief = .Sheets(.Sheets.Count)
End With
'Daten aus Zeile in Kopie eintragen
With wksSteckbrief
.Range("B4") = wksQ.Cells(objRow.Row, 1).Value
.Range("B8") = wksQ.Cells(objRow.Row, 2).Value
.Range("D8") = wksQ.Cells(objRow.Row, 3).Value
.Range("D12") = wksQ.Cells(objRow.Row, 4).Value
'usw.
.Name = .Range("B4").Text
End With
Next
End Sub

Anzeige
Zeilen - mehrerer selektierter Zellen kopieren
20.06.2012 10:09:38
fcs
Hallo Frischy,
hier ein Ansatz, der die kompletten Zeilen der selektierten Zellen kopiert und als Werte im Zielblatt am Ende der Liste anfügt.
Gruß
Franz
Sub CopyRows()
'Werte in Zeilen der selektierten Zellen kopieren
Dim objRow, ZeileZ As Long, ZelleL As Range
Dim wksQ As Worksheet, wksZ As Worksheet
Set wksQ = ActiveSheet
Set wksZ = Worksheets("ZielTab")
With wksZ
Set ZelleL = .UsedRange.Find(After:=.UsedRange.Cells(1, 1), _
What:="*", LookIn:=xlFormulas, lookat:=xlWhole, _
searchorder:=xlByRows, searchdirection:=xlPrevious)
If ZelleL Is Nothing Then 'Zieltabelle ist leer
ZeileZ = 0
Else
ZeileZ = ZelleL.Row
End If
Set ZelleL = Nothing
End With
For Each objRow In Selection.Rows
ZeileZ = ZeileZ + 1
wksQ.Rows(objRow.Row).Copy
wksZ.Rows(ZeileZ).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Next
End Sub

Anzeige
AW: Zeilen - mehrerer selektierter Zellen kopieren
20.06.2012 10:40:29
Frischy1990
Vielen Dank! Aber die Lösung meines Problems ist es leider noch immer nicht!
Es kann auch passieren, das ein Nutzer per STRG mehrere Spalten markiert, die nicht aneinander hängen, sodass es keinen markierten Bereich gibt.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Aktive Zeilen in Excel VBA kopieren und verarbeiten


Schritt-für-Schritt-Anleitung

Um die aktive Zeile oder mehrere Zeilen in einer Excel-Tabelle mit VBA zu kopieren, kannst Du folgende Schritte befolgen:

  1. Makro öffnen: Öffne den VBA-Editor in Excel (Alt + F11).
  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf „VBAProject (deineDatei)“ und wähle „Einfügen“ > „Modul“.
  3. Code eingeben: Füge den folgenden VBA-Code ein, um die aktiven Zeilen zu kopieren:

    Sub CopyActiveRows()
        Dim objRow As Range
        Dim wksZ As Worksheet
        Set wksZ = Worksheets("ZielTab") ' Zielblatt anpassen
    
        For Each objRow In Selection.Rows
            objRow.Copy Destination:=wksZ.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        Next objRow
    End Sub
  4. Makro ausführen: Wähle die Zeilen in deiner Tabelle aus, die Du kopieren möchtest, und führe das Makro aus.

Dieser Code kopiert alle aktiven Zeilen in das Zielblatt „ZielTab“. Wenn Du mehrere Zeilen auswählst, wird jede Zeile nacheinander kopiert.


Häufige Fehler und Lösungen

  • Fehler: "Objekt benötigt": Stelle sicher, dass Du ein Zielblatt definiert hast und dass es existiert.
  • Fehler: "Zielbereich nicht gefunden": Überprüfe, ob das Zielblatt nicht leer ist und die Zielzelle korrekt referenziert ist.
  • Lösung für mehrere Spalten: Wenn Du mehrere Spalten markierst, verwende den Selection.EntireRow Befehl, um sicherzustellen, dass alle Zeilen korrekt kopiert werden.

Alternative Methoden

Eine alternative Methode, um die aktiven Zeilen zu kopieren, wäre die Verwendung der ActiveCell.Row-Eigenschaft. Hier ein Beispiel:

Sub CopyActiveCellRow()
    Dim lngRow As Long
    lngRow = ActiveCell.Row
    Rows(lngRow).Copy Destination:=Worksheets("ZielTab").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End Sub

Mit diesem Makro kannst Du die Zeile der aktiven Zelle kopieren, falls nur eine Zeile ausgewählt wurde.


Praktische Beispiele

Hier sind einige Beispiele, wie Du die ActiveCell.Row in verschiedenen Szenarien verwenden kannst:

  1. Einzelne aktive Zeile kopieren:

    Sub CopySingleRow()
        Dim lngRow As Long
        lngRow = ActiveCell.Row
        Selection.EntireRow.Copy Destination:=Worksheets("ZielTab").Cells(lngRow, 1)
    End Sub
  2. Mehrere aktive Zeilen kopieren:

    Sub CopyMultipleRows()
        Dim objRow As Range
        For Each objRow In Selection.Rows
            objRow.Copy Destination:=Worksheets("ZielTab").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        Next objRow
    End Sub

In diesen Beispielen wird Selection.EntireRow verwendet, um alle Spalten der aktiven Zeilen zu kopieren.


Tipps für Profis

  • Verwende Application.CutCopyMode = False, um den Kopiermodus zu beenden, nachdem Du den Inhalt eingefügt hast.
  • Nutze ActiveCell.Row + 1, um die nächste Zeile zu bearbeiten, falls Du weiterführende Daten verarbeiten möchtest.
  • Du kannst auch Selection.EntireRow in Kombination mit Schleifen verwenden, um dynamisch auf die Auswahl der Nutzer zu reagieren.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur aktive Zeilen kopiert werden?
Achte darauf, dass Du die Zeilen mit der Maus oder der Tastenkombination Strg + Klick auswählst, bevor Du das Makro ausführst.

2. Was passiert, wenn ich keine Zeilen auswähle?
Das Makro gibt einen Fehler aus, wenn keine Zeilen ausgewählt sind. Du kannst dies abfangen, indem Du eine Überprüfung einfügst, um die Auswahl zu überprüfen.

3. Kann ich die kopierten Zeilen in eine andere Arbeitsmappe einfügen?
Ja, Du kannst den Zielbereich auf eine andere Arbeitsmappe verweisen, indem Du den Arbeitsmappen- und Arbeitsblattnamen anpasst.

Mit diesen Informationen und Beispielen bist Du gut gerüstet, um das ActiveCell.Row-Feature in Excel VBA effizient zu nutzen.

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