Microsoft Excel

Herbers Excel/VBA-Archiv

Datensatz kopieren+einfügen - Code verinfachen


Betrifft: Datensatz kopieren+einfügen - Code verinfachen von: Christian Schilling
Geschrieben am: 23.09.2019 12:23:57

Grüßt euch,

Für ein Projekt habe ich den unten stehenden Code geschrieben. Mit diesem sollen Daten(Aktienkursdaten) von Tabellenblatt "Eingabe" in Tabellenblatt "Daten" verschoben werden und anschließend die Spalte A5 und B5 bis Ende geleert werden. Des Weiteren sollen ein paar Spezifische Kenndaten, wie Name ISIN und Variablentyp in das Tabellenblatt "Daten" kopiert werden.
Die Daten aus Tabellenblatt "Eingabe" sollen die bereits verschobenen Daten im Tabellenblatt "Daten" nicht überschreiben, sondern in einer Spalte direkt daneben eingefügt werden.
Bisher sind es meistens ca. 250 Kursdaten sowie Datumsangaben welche kopiert werden sollen. Jedoch kann die Anzahl auch auf mehere tausend ansteigen.
Da mein bisheriger Code sehr langsam ist, würde ich gern einen Vorschlag für eine schnellere Variante bekommen.

(der letzte Wert des Datensatz soll nicht mitkopiert werden, da dieser meist fehlerbehaftet ist.)

Vielen Dank
Christian





Sub DatenkopierenEinfügen()

'Variablen definieren

Dim i As Long
Dim n As Long
Dim letzteZeile As Integer
Dim letzteSpalte As Integer
Dim Eingabe As Worksheet
Dim Daten As Worksheet

Set Eingabe = ThisWorkbook.Worksheets("Eingabe")
Set Daten = ThisWorkbook.Worksheets("Daten")

'ermittelt die letzte Zeile. Zählt von der letzten Reihe rückwärts bis zur ersten beschriebenen  _
Zeile.
    letzteZeile = Eingabe.Cells(Rows.Count, 2).End(xlUp).Row
    
'ermitteln welches die erste leere Spalte ist.
    letzteSpalte = Daten.Cells(2, Columns.Count).End(xlToLeft).Column
         n = letzteSpalte + 1
         
'Zeilen und Spalten in Tabellenblatt Daten fixieren.
    Daten.Activate
    Range("B5").Activate
    ActiveWindow.FreezePanes = True
    Eingabe.Activate
    
'Kopiert die Überschriften und Indexspezifischen Daten
    Eingabe.Cells(1, 2).Cut Destination:=Daten.Cells(1, n)
    Eingabe.Cells(2, 2).Cut Destination:=Daten.Cells(2, n)
    Eingabe.Cells(3, 2).Cut Destination:=Daten.Cells(3, n)

'Kopiert Daten aus Spalte A und B in neues Tabellenblatt
   
    
    For i = 5 To letzteZeile - 1

        Eingabe.Cells(i, 1).Copy Destination:=Daten.Cells(i, 1)
        Eingabe.Cells(i, 2).Cut Destination:=Daten.Cells(i, n)
        Daten.Cells(4, 2).Copy Destination:=Daten.Cells(4, n)
        
    
    Next i
    
    Eingabe.Range("B1").SpecialCells(xlCellTypeLastCell).Clear
    
 
End Sub


  

Betrifft: AW: Datensatz kopieren+einfügen - Code verinfachen von: ChrisL
Geschrieben am: 23.09.2019 13:10:28

Hi Christian

Die üblichen Tipps ScreenUpdating Calculation etc. findest du in der Recherche.

Hauptsächlich kannst du den Prozess aber beschleunigen, wenn du die Zellen nicht einzeln (in der Schleife), sondern am Stück kopierst.

Eingabe.Range(Eingabe.Cells(5, 1), Eingabe.Cells(letzteZeile - 1, 1)).Copy Destination:=Daten.Cells(5, 1)
Eingabe.Range(Eingabe.Cells(5, 2), Eingabe.Cells(letzteZeile - 1, 2)).Cut Destination:=Daten.Cells(5, n)

cu
Chris


  

Betrifft: AW: Datensatz kopieren+einfügen - Code verinfachen von: Christian Schilling
Geschrieben am: 23.09.2019 13:24:14

Hallo Christian,

danke dir für die Antwort.
Mit Range hatte ich es anfangs versucht, bin jedoch immer gescheitert bei der
Formulierung des Codes im RangeBereich.

Dank deiner Hilfe bin ich nun wieder schlauer ;-):

Den Rest werde ich mir noch zusammensuchen.

Danke


Beiträge aus dem Excel-Forum zum Thema "Datensatz kopieren+einfügen - Code verinfachen"