Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
764to768
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
764to768
764to768
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Verständnisfrage: Schleife beschleunigen mit array

Verständnisfrage: Schleife beschleunigen mit array
15.05.2006 13:31:22
Heiko
Hallo,
so gut bin ich in VBA leider noch nicht...
Wenn ich mit Hilfe einer Schleife aus einer Binär- oder Textdatei Daten (z.B. Meßwerte) einlese und in einem Tabelleblatt in einzelne Zellen ablege, kann das bei mehreren 1000 Werte schon eine Weile dauern. Ich vermute das liegt daran, weil immer nur ein Wert in die Variable eingelesen wird, dann muss in die Tabelle geblättert werden und der Wert in der Zelle abgelegt.
Kann man die Daten nicht zuerst alle auf einmal einlesen, z.B. mittels array und dann einen ganzen Block in die ganze Spalte eintragen? Ich könnte mir vorstellen, dass das schneller geht. Weiß leider nicht, wie (habe noch nicht mit arrays gearbeitet).
Vielleicht bringt´s auch nix und da ist ne doofe Idee.
Hat jemand ein paar erklärende Worte? Würde mich freuen und wahrscheinlich auch schlauer machen...
Vielen Dank im voraus,
Heiko

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verständnisfrage: Schleife beschleunigen mit array
15.05.2006 13:52:33
Heiko
Hallo Heiko,
da deine Frage doch ziemlich allgemein gehalten und vor allem ohne Code ist, nur mal ein Beispiel wie ich 50000 Zeilen (eine Spalte) mit meinem schlappen Dienst Laptop innerhalb von 2 Sekunden einlese.

Sub TextDatEinL()
Dim strPfad As String, strhelp As String
Dim arrInput() As String
strPfad = "H:\EXCEL\EXCEL Privat\Beispiele\Dat_Test_Dateien\TextDatZeileloeschen.txt"
Open strPfad For Binary As #1
strhelp = Space(LOF(1))
Get #1, , strhelp
arrInput = Split(strhelp, vbCrLf)
Close #1
ActiveSheet.Range(Cells(1, 1), Cells(UBound(arrInput, 1), 1)) = _
Application.WorksheetFunction.Transpose(arrInput)
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Verständnisfrage: Schleife beschleunigen mit a
15.05.2006 14:19:10
Reinhard
Hi Heiko,
ich krieg da einen Laufzeitfehler 1004 in der letzten Zeile.
Option Explicit
Option Explicit
Sub TextDatEinL()
Dim strPfad As String, strhelp As String
Dim arrInput() As String
strPfad = "c:\temp\text1.txt"
Open strPfad For Binary As #1
strhelp = Space(LOF(1))
Get #1, , strhelp
arrInput = Split(strhelp, vbCrLf)
Close #1
ActiveSheet.Range(Cells(1, 1), Cells(UBound(arrInput, 1), 1)) = Application.WorksheetFunction.Transpose(arrInput)
End Sub

Gruß
Reinhard
AW: Verständnisfrage: Schleife beschleunigen mit a
15.05.2006 14:24:01
Heiko
Hallo Reinhard,
wieviele Zeilen hat den deine Textdatei, denn bei dem Transpose Befehl gibt es bestimmte Grenzen bezüglich der zu verarbeitenden Datenmengen.
Das ganze (also die Beschränkungen des Transpose Befehls) hat MichaV schon mal im Forum vom OnlineExcel diskutiert.
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Verständnisfrage: Schleife beschleunigen mit a
15.05.2006 14:35:26
Reinhard
Hallo Heiko,
nur 3958 Bytes.
Option Explicit
Sub TextDatEinL()
Dim strPfad As String, strhelp As String
Dim arrInput() As String
strPfad = "c:\temp\text1.txt"
Open strPfad For Binary As #1
strhelp = Space(LOF(1))
Get #1, , strhelp
arrInput = Split(strhelp, vbCrLf)
Close #1
MsgBox Len(strhelp)
ActiveSheet.Range(Cells(1, 1), Cells(UBound(arrInput, 1), 1)) = Application.WorksheetFunction.Transpose(arrInput)
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: Verständnisfrage: Schleife beschleunigen mit a
15.05.2006 14:37:56
Heiko
Hallo Reinhard,
welche EXCEL Version ?
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Verständnisfrage: Schleife beschleunigen mit a
15.05.2006 14:39:36
Reinhard
Hallo Heiko,
sorry. die gleiche wie der Anfrager, XL2000 auf WinXP.
Gruß
Reinhard
AW: Verständnisfrage: Schleife beschleunigen mit a
15.05.2006 14:46:31
Heiko
Hallo Reinhard,
lad mal deine txt datei hoch, dann schau ich mal ob es bei mir geht.
Kann mir den Fehler erstmal nicht erklären, wie gesagt bei mir läuft es so.
Textdatei ca. 50000 Zeilen, 3,7 Mb Daten drin
Gruß Heiko
AW: Verständnisfrage: Schleife beschleunigen mit a
15.05.2006 14:51:20
Reinhard
Hallo Heiko,
es ist der Inhalt einer Webseite, also mit Tags drinnen, liegt das daran?. aber an sich ist es reiner AscII-Code.
Ich muss jetzt weg, sonst hätte ich es noch mit ner normalen Textdatei getestet, naja mache ich ggfs heute Abend.
https://www.herber.de/bbs/user/33646.txt
Gruß
Reinhard
Anzeige
AW: Verständnisfrage: Schleife beschleunigen mit a
15.05.2006 15:02:03
Heiko
Hallo Reinhard,
so geht´s. Deine Textdatei scheint Zeilenweise nicht so wirklich mit LF und CR getrennt zu sein. Liegt wohl an dem Programm mit dem mal der HTML Code erstellt wurde.

Sub TextDatEinL()
Dim strPfad As String, strhelp As String
Dim arrInput() As String
Dim lngI As Long
strPfad = "H:\EXCEL\EXCEL Privat\Beispiele\Dat_Test_Dateien\Reinhard.txt"
Open strPfad For Binary As #1
strhelp = Space(LOF(1))
Get #1, , strhelp
arrInput = Split(strhelp, vbLf)
Close #1
'ActiveSheet.Range(Cells(1, 1), Cells(UBound(arrInput, 1), 1)) = _
'    Application.WorksheetFunction.Transpose(arrInput)
For lngI = 1 To UBound(arrInput)
ActiveSheet.Cells(lngI, 1) = arrInput(lngI)
Next lngI
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Verständnisfrage: Schleife beschleunigen mit a
16.05.2006 00:03:43
Reinhard
Hallo Heiko,
also lags nicht an deinem Code sondern an meiner Datei, bzw deren Struktur.
Gut zu wissen, dann nehm ich die nicht mehr um Dateieinleseübungen zu testen.
Danke ^ Gruß
Reinhard
hmmm... noch nicht klar...
15.05.2006 14:28:18
Heiko
Hallo, Namensvetter,
erstmal danke für Deine Antwort. Ich habe meine Frage absichtlich ganz allegemein formuliert, ich möchte ja das Prinzip eines arrays verstehen.
In erster Linie habe ich gesehen, dass Du es wohl kannst. Wenn ichs richtig verstanden habe, liest Du deine ganze Datei in einen String ein, splittest diesen mit einem delimiter (strhelp?) und überträgst das Ganze dann in eine Spalte. Dein array ist dimensionslos, aber bekommt im Code unten keinen Index wie array(i) oder sowas (was bedeutet z.B. VBCrLf?). Die Spalte fängt wohl mit 1 an und hört mit UBound (?) auf. UBound soll irgendwie die Größe des arrays angeben. Wenn doch aber ein String im array steht, ist doch die Größe 1? Aber Du vermeidest die lästige Schleife.
Ist mir noch nicht ganz klar, sorry...
Dennoch Danke für Deine schnelle Antwort,
Heiko
Anzeige
AW: hmmm... noch nicht klar...
15.05.2006 14:43:42
Heiko
Hallo Heiko,

Sub TextDatEinL()
Dim strPfad As String, strhelp As String
Dim arrInput() As String
strPfad = "H:\EXCEL\EXCEL Privat\Beispiele\Dat_Test_Dateien\TextDatZeileloeschen.txt"
Open strPfad For Binary As #1
strhelp = Space(LOF(1))
' die komplette Textdatei in einen Sring einlesen.
Get #1, , strhelp
' Nun diesen String splitten, also die einzelnen Zeilen herausarbeiten,
' Zeilen sind doch in einem Textfile mit Lf (Line Feed) und Cr (Cariage Reture) getrennt
arrInput = Split(strhelp, vbCrLf)
Close #1
' Da nun aber ein Array mit einer Zeile und vielen Spalten vorliegt muss es noch
' transponiert werden, also eine Spalte viele Zeilen machen.
' Das ubound(arrinput) liest die Anzahl an Einträgen im Array aus.
' Schau mal in der VBA Hilfe unter Ubound, Lbound ...
ActiveSheet.Range(Cells(1, 1), Cells(UBound(arrInput, 1), 1)) = _
Application.WorksheetFunction.Transpose(arrInput)
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige