Hallo zusammen!
Ich möchte via VBA bestimmte Werte von einem Tabellenblatt in das nächste übertragen. Genauer gesagt habe ich eine Liste mit Zeitstempeln, bei der die Zeitstempel mehr als ein Mal vorkommen und nicht durchgängig sind:
Zeitstempel |
1 |
1 |
4 |
4 |
4 |
7 |
7 |
Im nächsten Tabellenblatt hätte ich gerne alle "existierenden" Zeitstempel nur ein Mal:
Dazu nutze ich gerade folgenden Code:
Public Sub TimeStamp()
'Deklariere alle Variablen
Dim i As Integer
i = 2
Dim j As Integer
j = 3
Dim n As Integer
n = 1
Dim k As Integer
Dim l As Integer
'Schleife, um Werte bei Veränderung in nächstes Tabellenblatt zu übertragen
'j ist eine Zelle unter i, um Veränderung abprüfen zu können
'"raw_data" ist Quellen-, "data" ist Ziel-Tabellenblatt
Do
'in Spalte 8 sind die Zeitstempel in der Quelle
k = ActiveWorkbook.Worksheets("raw_data").Cells(i, 8).Value
l = ActiveWorkbook.Worksheets("raw_data").Cells(j, 8).Value
If k <> l Then
n = n + 1
'übertrage in Zieldatei
ActiveWorkbook.Worksheets("data").Cells(n, 1).Value = k
End If
i = i + 1
j = j + 1
Loop Until IsEmpty(ActiveWorkbook.Worksheets("raw_data").Cells(i, 1))
End Sub
Der Code funktioniert an sich und tut was er soll. Allerdings haben die Quelltabellen locker mal bis zu 7000 Zeilen und dann läuft der Code so lang, dass mir das in dieser Zeit konsumierte Koffein gar nicht mehr gut tut. Zum Beispiel: In einer Tabelle mit ~5800 Zeilen im Quellblatt und ~2250 übertragenen Zeitstempeln 18 Minuten auf >95% CPU.
Daher jetzt meine Frage(n): Liegt das an meinem Code? Gibt es eine Möglichkeit, ihn besser zu schreiben? Oder liegt es an meinem PC?
Hier noch die entsprechenden Spezifikationen:
- Windows 10
- Office365
- Prozessor: Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz 2.81 GHz
- RAM: 16,0 GB (15,9 GB verwendbar))
Vielen Dank schon mal im Voraus!
Sandra
|