Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1836to1840
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Geschwindigkeit von CDate/CDbl

Geschwindigkeit von CDate/CDbl
17.07.2021 22:49:09
CDate/CDbl
Hallo zusammen,
Ich habe eine Frage zu der Geschwindigkeit bzw. Leistungsfähigkeit von CDate/CDbl, bitte.
Aus dem Web hole ich mit HTTPRequest Daten, die zunächst in ein Variant 1-Dim Array geschrieben werden. Mit Split wird daraus ein 2-Dim Array, das immer aus 6 Spalten und bis zu 5.000 Zeilen besteht. Diese Daten kommen nur als Text.
Beim Übertragen des 2-Dim Array in ein Arbeitsblatt mache ich aus einer Spalte mit CDate ein Datum und aus den anderen mit CDbl Zahlen, damit diese Daten mit Range.Sort (auch nach dem Datum) sortierbar und weiterverarbeitbar sind.
Das funktioniert einwandfrei, nur es dauert sehr lange. Für 138 Zeilen wird exakt 1 Minute benötigt, für ca. 1250 Zeilen etwa 5 Minuten. Während dieser Konvertierung ist die CPU-Last durchgehend 100%.
Der Transfer vom 2D-Array in das Arbeitsblatt erfolgt mit einer For - Next Schleife. Alternativ habe ich das Array zunächst in das Arbeitsblatt übertragen und dann dort mit For Each Zelle... mit CDate/CDbl von Text in Zahlen konvertiert. Im Ergebnis dauern beide Methoden gleich lang.
Hat jemand eine Idee/Alternative wie ich den Text sehr viel schneller in sortier- und weiterverarbeitbare Daten konvertieren kann?
Herzlichen Dank im voraus.
Friedrich

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Mit Formeln die Texte erst im Blatt wandeln
17.07.2021 23:06:07
lupo1
... und vorher nicht einzeln dort einlesen, sondern den Block reinkopieren.
Beide Verfahren sind für sich wohl schneller.
AW: Geschwindigkeit von CDate/CDbl
18.07.2021 09:57:52
CDate/CDbl
Hi
Das Zeitkritische ist der Transfer per For-Next ins Tabellenblatt.
Jeder Schreibvorgang auf dem Tabellenblatt löst eine Reihe von Hintergrundprozessen aus, die Zeit kosten. Einige kann man abschalten (such mal nach "GetMoreSpeed") einige nicht.
Der bessere Vorgang wäre hier, ein echtes 2d-Array zu erstellen (Schleifen mit Arrays sind sehr schnell), und dann das 2d-Array als ganzes in einem Schritt in die Tabelle zu schreiben (dann laufen die hintergrundprozesse nur 1x).
Oder du schreibst den kompletten Text aus dem 1d-Array in eine Spalte und wendet dann auf diese Spalte die Menüfunktion "Daten - Datentools - Text in Spalten" (VBA TextToColumns) an, um den Text in Spalten aufzuteilen. Dabei kann man auch für Datumswerte vorgeben, in welcher Anordnung sue vorliegen, so dass auf jeden Fall korrekt umgewandelt wird.
Gruß Daniel
Anzeige
AW: Geschwindigkeit von CDate/CDbl
18.07.2021 20:15:59
CDate/CDbl
Vielen Dank lupo1 und Daniel für die schnellen Antworten.
TextToColumns kannte ich nicht und die Syntax scheint recht komplex zu sein. Ich werde es jetzt erstmal versuchen zu verstehen und dann probieren.
Zur der Frage Array in einem Rutsch in die Tabelle zu bringen, zeige ich mal die Debug.Print's mit den Zeiten hier:
(kursiv: Array & Range, fett: Konvertierung mit CDate/CDbl )
Sub GetDataInit: 18.07.2021 14:41:15
Call OVKurse_holen: 18.07.2021 14:41:15
Start Function OVKurse_holen: 14:41:15
Start 'Function Kursliste': 14:41:15 Interval: Y1
HTTP Antwort ist heruntergeladen: 14:41:17 Interval: Y1
HTTP Antwort mit SPLIT in 1D Array 'W' fertig: 14:41:17 Interval: Y1
Umwandlung 1D Array in 2D Array 'arrKursliste' fertig: 14:41:17 Interval: Y1
Array hat 138 Zeilen, 6 Spalten
Beginn Workbook 'Price-Files' öffnen und WorkSheet 'DataImport' aktivieren: 14:41:17 Interval: Y1
Start Array 'arrKursliste' in Sheet 'DataImport' schreiben: 14:41:19 Interval: Y1
Range hat 138 Zeilen, 6 Spalten
Beginn Spalte 1 mit CDate von Text in Datum und
Spalten 2 - 5 von Text in Zahlen (CDbl) konvertieren:
14:41:19
Interval: Y1

Ende der Umwandung Text in Datum bzw. Zahlen : 14:42:16
Range hat 138 Zeilen, 6 Spalten
Ende Sortieren Datum Ascending in Descending: 14:42:16
Ende Price-File kpl. erstellen: 14:42:17 Interval: Y1
Ende von Restarbeiten, umbenennen, formatieren, etc: 14:42:17 Interval: Y1
End of Procedure: 14:42:18
Wie man sieht, ist der Flaschenhals eigentlich nur die Text zu Zahl Konvertierung.
Ich mache mich dann jetzt mal an das für mich neue TextToColumns.
Friedrich
Anzeige
AW: Geschwindigkeit von CDate/CDbl
18.07.2021 20:48:49
CDate/CDbl
Text to Columns kann man hervorragend mit dem Recorder aufzeichnen.
Gruß Daniel
AW: Geschwindigkeit von CDate/CDbl
18.07.2021 21:26:24
CDate/CDbl
Das mit dem Makrorecorder war der Kick, Daniel!
Herzlichen Dank, nur noch Code anpassen, fertig
LG Friedrich
AW: Geschwindigkeit von CDate/CDbl
19.07.2021 16:24:10
CDate/CDbl
Hallo Daniel,
hier nur eine kurze Rückmeldung zu Deinem Tip:
Was vorher mit CDate/CDbl etwa 10min dauerte ist jetzt mit TextToColumn inkl. Sortierung in weniger als 1(!) Sekunde erledigt.
Danke nochmals für den Rat.
Gruß Friedrich

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige