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

Forumthread: VBA - cell.copy

VBA - cell.copy
05.08.2014 10:04:01
Felix
Guten Tag zusammen,
ich stehe vor einem kleinen Problem hinsichtlich meines Codes.
Hintergrund ist, dass ich ein Tabellenblatt nach einem bestimmten Wort durchsuche und wenn dieses gefunden wird, die entsprechende Zeile in ein zweites Blatt kopiert werden soll. Das funktioniert soweit auch hervorragend. Siehe Code:
  • 
    Public Sub Daten_holen()
    Dim i As Integer
    Dim cell As Range
    i = 8
    For Each cell In Tabelle1.Range("I:I")
    If Not cell Is Nothing Then
    If cell.Value = "Suchwort" Then
    cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
    i = i + 1
    End If
    End If
    Next cell
    End Sub
    


  • Nun ist es so, dass nur in den ersten 10 Spalten Daten enthalten sind. In Spalte 11 des zweiten Blattes würde ich gerne eine Formel platzieren, die nicht jedes mal überschrieben wird, wenn ich das Makro ausführe. Es soll also nicht mehr die komplette Zeile kopiert und eingefügt werden, sondern lediglich die ersten 10 Spalten (A:J). Leider komme ich an dieser Stelle nicht weiter. Alle meine Versuche sind bislang gescheitert. Ich hoffe ihr könnt mich auf den richtigen Pfad bringen.
    Vielen vielen Dank im Voraus.

    Anzeige

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

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA - cell.copy
    05.08.2014 10:21:25
    hary
    Moin Felix
    Range(cell.Row, 1, cell.Row, 10).Copy Tabelle2.Rows(i)
    

    gruss hary

    AW: VBA - cell.copy
    05.08.2014 10:23:18
    Robert
    Hallo Felix,
    Probiere dieses:
    Option Explicit
    Public Sub Daten_holen()
    Dim i As Integer
    Dim cell As Range
    i = 8
    For Each cell In Tabelle1.Range("I:I")
    If Not cell Is Nothing Then
    If cell.Value = "Suchwort" Then
    Tabelle1.Range(Tabelle1.Cells(cell.Row, 1), Tabelle1.Cells(cell.Row, 10)).Copy  _
    Destination:=Tabelle2.Cells(i, 1)
    i = i + 1
    End If
    End If
    Next cell
    End Sub
    
    Viele Grüße
    Robert

    Anzeige
    AW: VBA - cell.copy
    05.08.2014 10:27:04
    Daniel
    Hi
    es gibt verschiedne Varianten wie man das realisieren kann.
    Ich bevorzuge diese, um nur die Spalten A-J zu kopieren:
    cell.Offset(0, 1 - cell.Column).Resize(, 10).copy Destination:=Tabelle2.Rows(i)
    
    btw, Zeilen einzeln per Schleife zu kopieren ist so ziemlich das langsamste was man tun kann.
    du könntest beispielsweise den Autofilter setzen und in Spalte I nach dem Suchwort filtern und dann alle Zeilen ausser der Zeile 1 kopieren und einfügen.
    In gefilteren Tabellen werden nur die sichtbaren Zeilen kopiert, beim Einfügen "rutschen" dann die Zeilen zusammen so dass anstelle der nicht kopierten Zeilen keine Leerzeilen entstehen.
    Noch schneller wirds, wenn du die Tabelle vorher nach Spalte I sortierst, so dass alle Zeilen, die kopiert werden müssen, direkt lückenlos untereinander stehen.
    Gruß Daniel
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    VBA: Zellen kopieren mit .Copy und .Copy Destination


    Schritt-für-Schritt-Anleitung

    Um nur bestimmte Spalten in Excel mit VBA zu kopieren, kannst du den folgenden Code verwenden. Dieser Code sucht in Spalte I nach einem bestimmten Wort und kopiert nur die ersten 10 Spalten der Zeile, in der das Wort gefunden wurde:

    Option Explicit
    Public Sub Daten_holen()
        Dim i As Integer
        Dim cell As Range
        i = 8
        For Each cell In Tabelle1.Range("I:I")
            If Not cell Is Nothing Then
                If cell.Value = "Suchwort" Then
                    Tabelle1.Range(Tabelle1.Cells(cell.Row, 1), Tabelle1.Cells(cell.Row, 10)).Copy _
                    Destination:=Tabelle2.Cells(i, 1)
                    i = i + 1
                End If
            End If
        Next cell
    End Sub

    Dieser Code verwendet die Methode .Copy mit der Destination-Option, um die Zielzelle anzugeben, in die die Daten kopiert werden sollen. So kannst du sicherstellen, dass die Formel in Spalte 11 nicht überschrieben wird.


    Häufige Fehler und Lösungen

    1. Fehler: "Typen unverträglich"

      • Lösung: Überprüfe, ob die Zellen, die du kopieren möchtest, tatsächlich Werte enthalten. Stelle sicher, dass die Zellen im richtigen Format sind.
    2. Fehler: Makro läuft nicht

      • Lösung: Stelle sicher, dass dein Makro aktiviert ist und dass du die richtige Excel-Version verwendest, die VBA unterstützt.
    3. Fehler: Zielzelle schon belegt

      • Lösung: Füge eine Bedingung hinzu, die sicherstellt, dass die Zielzelle leer ist, bevor du die Daten kopierst.

    Alternative Methoden

    Eine weitere Möglichkeit, nur die ersten 10 Spalten zu kopieren, ist die Verwendung der Offset- und Resize-Methoden. Hier ein Beispiel:

    cell.Offset(0, 1 - cell.Column).Resize(, 10).Copy Destination:=Tabelle2.Rows(i)

    Diese Methode ist besonders nützlich, wenn du nur einen bestimmten Bereich relativ zu der gefundenen Zelle kopieren möchtest.


    Praktische Beispiele

    Hier sind einige praktische Anwendungen der .Copy-Methode in verschiedenen Szenarien:

    1. Kopiere eine gesamte Zeile:

      cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
    2. Kopiere einen Bereich:

      Tabelle1.Range("A1:J10").Copy Destination:=Tabelle2.Range("A1")

    Diese Beispiele zeigen, wie flexibel die .Copy-Methode in VBA ist und wie du sie an deine spezifischen Anforderungen anpassen kannst.


    Tipps für Profis

    • Verwende Application.ScreenUpdating = False, um die Bildschirmaktualisierung während des Kopiervorgangs zu deaktivieren, was die Ausführungsgeschwindigkeit erhöht.
    • Denke daran, die Option Explicit-Anweisung am Anfang deiner Module zu verwenden, um sicherzustellen, dass alle Variablen deklariert werden.
    • Wenn du große Datenmengen kopierst, ziehe in Betracht, die Daten zuerst in ein Array zu laden und dann in das Ziel zu übertragen. Dies kann die Performance erheblich verbessern.

    FAQ: Häufige Fragen

    1. Wie kann ich eine gesamte Zeile kopieren, wenn ich nur eine Zelle habe? Du kannst die gesamte Zeile mit cell.EntireRow.Copy kopieren.

    2. Was mache ich, wenn ich nur bestimmte Spalten innerhalb einer Zeile kopieren möchte? Verwende den Range-Befehl zusammen mit .Copy, um nur die gewünschten Spalten anzugeben. Beispiel: Tabelle1.Range("A" & cell.Row & ":J" & cell.Row).Copy.

    3. Wie kann ich die Zielzelle dynamisch anpassen? Du kannst die Zielzelle mit einer Zählvariable, wie i in deinem Beispiel, dynamisch anpassen, um sicherzustellen, dass die Daten an die richtige Stelle eingefügt werden.

    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