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

VBA Nicht EntireRow.Copy

Forumthread: VBA Nicht EntireRow.Copy

VBA Nicht EntireRow.Copy
29.06.2018 13:29:09
Lisa
Hallo zusammen,
ich habe einen Code geschrieben der eine Spalte nach einem Wert durschaut und dann die passenden Zeilen dazu in ein anderes Blatt schreibt.
Allerdings nutze ich die Anweisung rng.EntireRow.Copy, womit die ganze Zeile kopiert ich.
ich möchte jedoch nur den Wert aus Zelle A, B und c übertragen haben.
Hat jemand eine Lösung wie das anzupassen ist?
Wäre echt dankbar, ich sitze schon den ganzen Vormittag an dieser Herausforderung.
Vielen Dank schon einmal.
Sub FindenUndKopieren()
Dim rng As Range
Dim vWert As Variant
Dim sFirstAdress As String
vWert = InputBox( _
prompt:="Bitte Nummer eingeben:", _
Title:="Suche")
Set rng = Worksheets("Blatt1").Range("A:A").Find(vWert)
If rng Is Nothing Then
MsgBox "Wert " & Wert & " nicht gefunden!"
Else
sfirstaddress = rng.Address
Do
'Intersect(rng.EntireRow,Columns("A").Copy
' Intersect(rng.EntireRow, Columns("B:Y")).Copy
rng.EntireRow.Copy
'Range(Cells(cell.Row, "A"), Cells(cell.Row, "D")).Copy
Worksheets("Tabelle1").Cells(Rows.Count, "A").End(xlUp) _
.Offset(1, 0).PasteSpecial Paste:=xlPasteAll
Set rng = Worksheets("Blatt1").Range("A:A").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  sfirstaddress
End If
End Sub

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 13:40:41
ChrisL
Hi
Range(Cells(rng.Row, "A"), Cells(rng.Row, "C")).Copy
cu
Chris
AW: VBA Nicht EntireRow.Copy
29.06.2018 13:53:30
Lisa
Hallo Chris,
dies habe ich bereits ausprobiert und im Code aus kommentiert.
Denn das verursacht einen Laufzeitfehler 9 "Außerhalb des Bereichs".
Hast Du eine andere Idee?
VG
Lisa
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 14:11:22
Nepumuk
Hallo Lisa,
teste mal:
Option Explicit

Public Sub FindenUndKopieren()
    
    Dim rng As Range
    Dim vWert As Variant
    Dim sFirstAdress As String
    
    vWert = InputBox(prompt:="Bitte Nummer eingeben:", Title:="Suche")
    
    With Worksheets("Blatt1")
        
        Set rng = .Columns(1).Find(vWert)
        
        If rng Is Nothing Then
            MsgBox "Wert " & vWert & " nicht gefunden!"
        Else
            sFirstAdress = rng.Address
            Do
                
                Call rng.Resize(1, 3).Copy(Destination:= _
                    Worksheets("Tabelle1").Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))
                
                Set rng = .Columns(1).FindNext(rng)
                
            Loop Until rng.Address = sFirstAdress
        End If
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 15:42:25
Lisa
Hey Nepumuk,
funktioniert soweit super. Vielen Dank für die Mühe!
Um es perfekt zu machen hab ich noch eine kleine Frage. Gibt es eine Möglichkeit Zeile B nicht zu kopieren bzw. zu löschen?
Alternativ schau ich mal ob ich nicht zusätzlich ein Makro bauen kann welches B einfach mit C überschreibt.
Ein schönes We.
Grüße
Lisa
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 15:47:36
Nepumuk
Hallo Lisa,
das ist nur eine kleine Änderung:
Call .Range(rng, rng.Offset(0, 1)).Copy(Destination:= _
    Worksheets("Tabelle1").Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))

Gruß
Nepumuk
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 15:51:20
Nepumuk
Ooooooooooooooops,
Denkfehler. So geht's:
Call Union(rng, rng.Offset(0, 2)).Copy(Destination:= _
    Worksheets("Tabelle1").Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))

Gruß
Nepumuk
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 16:15:31
Lisa
Hallo Nepumuk,
falls Du noch einen Moment hast. Deine Verbesserung funktioniert nur halbwegs oder ich bin zu unerfahren in VBA.
Es wird jetzt, je nach Anpassung zwar Zelle C oder D ausgegeben und B weggelassen aber nicht C und D zs.
Gruß
Lisa
AW: VBA Nicht EntireRow.Copy
29.06.2018 16:18:21
Nepumuk
Hallo Lisa,
? C und D zusammen ? in einer Zelle in Spalte B oder wie oder was?
Gruß
Nepumuk
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 16:22:54
Lisa
Hallo Nepumuk,
sorry für meine Verwirrung.
Also Zeile A soll weiterhin in A kopiert angezeigt werden Zeile B weggelassen und dementsprechend C in B kopiert werden und D in C. Das Kopieren erfolgt jeweils in das andere Blatt (Tabelle1) statt.
Gruß
Lisa
AW: VBA Nicht EntireRow.Copy
29.06.2018 16:45:08
Nepumuk
Hallo Lisa,
Ahhhhhhhhh!!! Na dann:
Option Explicit

Public Sub FindenUndKopieren()
    
    Dim rng As Range
    Dim vWert As Variant
    Dim sFirstAdress As String
    
    vWert = InputBox(prompt:="Bitte Nummer eingeben:", Title:="Suche")
    
    With Worksheets("Blatt1")
        
        Set rng = .Columns(1).Find(vWert)
        
        If rng Is Nothing Then
            MsgBox "Wert " & vWert & " nicht gefunden!"
        Else
            sFirstAdress = rng.Address
            Do
                
                Call Union(rng, rng.Offset(0, 2).Resize(1, 2)).Copy(Destination:= _
                    Worksheets("Tabelle1").Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))
                
                Set rng = .Columns(1).FindNext(rng)
                
            Loop Until rng.Address = sFirstAdress
        End If
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 17:43:18
Lisa
Hallo Nepumuk,
vielen vielen Dank ich werde versuchen alles zu verstehen.
Schönes We.
Gruß
Lisa
AW: VBA Nicht EntireRow.Copy
29.06.2018 16:15:31
Lisa
Hallo Nepumuk,
falls Du noch einen Moment hast. Deine Verbesserung funktioniert nur halbwegs oder ich bin zu unerfahren in VBA.
Es wird jetzt, je nach Anpassung zwar Zelle C oder D ausgegeben und B weggelassen aber nicht C und D zs.
Gruß
Lisa
Anzeige
AW: VBA Nicht EntireRow.Copy
29.06.2018 16:15:32
Lisa
Hallo Nepumuk,
falls Du noch einen Moment hast. Deine Verbesserung funktioniert nur halbwegs oder ich bin zu unerfahren in VBA.
Es wird jetzt, je nach Anpassung zwar Zelle C oder D ausgegeben und B weggelassen aber nicht C und D zs.
Gruß
Lisa
;
Anzeige

Infobox / Tutorial

VBA: Zeilen kopieren ohne EntireRow.Copy


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe in den VBA-Editor (Alt + F11).
  2. Erstelle ein neues Modul:
    • Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.
  3. Füge den folgenden Code ein, um nur bestimmte Spalten zu kopieren:
Public Sub FindenUndKopieren()
    Dim rng As Range
    Dim vWert As Variant
    Dim sFirstAddress As String

    vWert = InputBox(prompt:="Bitte Nummer eingeben:", Title:="Suche")

    With Worksheets("Blatt1")
        Set rng = .Columns(1).Find(vWert)

        If rng Is Nothing Then
            MsgBox "Wert " & vWert & " nicht gefunden!"
        Else
            sFirstAddress = rng.Address
            Do
                ' Kopiere die Werte von Spalte A, C und D, überspringe B
                Call Union(rng, rng.Offset(0, 2).Resize(1, 2)).Copy(Destination:= _
                Worksheets("Tabelle1").Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))

                Set rng = .Columns(1).FindNext(rng)
            Loop Until rng.Address = sFirstAddress
        End If
    End With
End Sub
  1. Schließe den Editor und kehre zu Excel zurück.
  2. Führe das Makro aus (Alt + F8) und wähle "FindenUndKopieren".

Häufige Fehler und Lösungen

  • Laufzeitfehler 9 ("Außerhalb des Bereichs"):

    • Stelle sicher, dass die angegebene Tabelle ("Blatt1" oder "Tabelle1") existiert und richtig benannt ist.
  • Keine Werte gefunden:

    • Überprüfe, ob die gesuchten Werte tatsächlich in der Spalte vorhanden sind.

Alternative Methoden

Eine alternative Methode zur Verwendung von EntireRow.Copy ist die Verwendung von Resize und Union. So kannst du gezielt die benötigten Zellen kopieren, ohne die komplette Zeile zu verwenden:

' Beispiel für das Kopieren der Spalten A und C
Call Union(rng, rng.Offset(0, 2)).Copy(Destination:= _
Worksheets("Tabelle1").Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))

Praktische Beispiele

Wenn du spezifisch nur die Werte aus den Spalten A, C und D kopieren möchtest, kannst du den Code wie folgt anpassen:

Call Union(rng, rng.Offset(0, 2).Resize(1, 2)).Copy(Destination:= _
Worksheets("Tabelle1").Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0))

Hierbei wird Union verwendet, um die gewünschten Zellen auszuwählen und zu kopieren.


Tipps für Profis

  • Nutze Option Explicit am Anfang deines Codes, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Wenn du regelmäßig mit VBA arbeitest, speichere deine Makros in einer Personal Macro Workbook-Datei, damit sie in allen Excel-Dokumenten verfügbar sind.

FAQ: Häufige Fragen

1. Kann ich mehrere Spalten gleichzeitig kopieren?
Ja, benutze die Union-Funktion, um mehrere nicht zusammenhängende Bereiche auszuwählen.

2. Wie kann ich die Zeilen formatieren, während ich sie kopiere?
Du kannst das Kopieren von Formatierungen hinzufügen, indem du PasteSpecial mit dem Parameter xlPasteFormats verwendest.

3. Was mache ich, wenn ich nur bestimmte Zeilen basierend auf einem Kriterium kopieren möchte?
Du kannst eine If-Bedingung innerhalb deiner Schleife verwenden, um nur die Zeilen zu kopieren, die deinem Kriterium entsprechen.

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