Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
380to384
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
380to384
380to384
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten schneller einfügen als per activecell.offset

Daten schneller einfügen als per activecell.offset
12.02.2004 13:23:22
Jan
Hallo zusammen,
gibt es eine (laufzeitmäßig) schnellere Möglichkeit Daten aus einer Binärdatei (10 Spalten a 4Byte long-Integer) in Zellen einzufügen, als per activecell.offset(..) = ..., siehe Code unten.
Ich lese aus der Datei (FileFS) die Daten Weg h(4) und Kraft h(2) ein und schreibe h(4) in Spalte "spaltem" und h(2) in "spalte" sobald sich die Drehzahl ändert, erhöhe ich "spalte" und "spaltem" um 2, um nachher einfacher die Diagramme erzeugen zu können. Das reine Einlesen der Daten (for-next Schleife) dauert ohne Verarbeitung der Daten nur 1sec. Das Schreiben der Daten in die Excel-Tabelle (alles ab Sprungmarke writeData:) dauert ohne Formatierung 14sec. Kann man diese Zeit für das Schreiben der Daten irgendwie optimieren? Das Teilen von h(2) / 1000# macht keinen messbaren Zeitunterschied.
Besten Dank
Jan Lubina
test = Time
While Not EOF(fileFS)
DoEvents
'10 Spalten a 4Byte (Long-Int) einlesen
For i = 1 To 10
Get #fileFS, , h(i)
'1=Drehzahl /100 = 1/min
'2=Kraft = N
'3=Geschwindigkeit /1000 =m/s
'4=Weg /1000 = mm
'5=Temp / 100 = °C
'6=Zähler
'7=Bit zur Reibschleifenerkennung (1=Reibmessung / 0=Kennungsmessung)
'8=56
'9=57
'10=58
Next i
If h(1) <> ad Or h(7) <> rc Then
'neue Drehzahl (h(1)) oder Reibschleifen-Bit (h(7)) geändert
If h(1) = 0 Then
'Nulldrehzahl am Ende der Datei auslassen
DoEvents
ElseIf h(7) = 1 Then
cnt_rl = 1 'Zähler zur Ermittlung der Anzahl Datenspalten
'Reibschleifenerkennung
'Debug.Print h(6) & " " & h(7) & " " & h(8) & " " & h(9) & " " & h(10)
rc = 1 'Hilfsvariable zur Erkennung der Reibschleife
spalte = 1
'korrekte Reibdrehzahl (wird zu Begin mehrmals überschrieben)
If ad < h(1) Then
ActiveCell.offset(0, 0) = "Reib. " + CStr(CDbl(ad) / 100#)
ActiveCell.offset(0, 1) = "x 1/min"
ActiveCell.offset(1, 0) = "s/mm"
ActiveCell.offset(1, 1) = "F/N"
End If
ad = h(1) 'alte Drehz. mit neuer Drehzahl überschreiben
GoTo writeData
ElseIf h(7) = 0 Then
cnt_rl = cnt_rl + 1
rc = 0
'Normale Drehzahl
'Max. Zeilenanzahl bestimmen
If counter > max Then max = counter
counter = 1
spalte = spalte + 2
spaltem = spalte - 1
'Spaltenüberschriften
ActiveCell.offset(0, spalte - 1) = h(1) / 100#
ActiveCell.offset(0, spalte) = "x 1/min"
ActiveCell.offset(1, spalte - 1) = "s/mm"
ActiveCell.offset(1, spalte) = "F/N"
ad = h(1) 'alte Drehz. mit neuer Drehzahl überschreiben
GoTo writeData
End If
Else
writeData:
'alte Drehzahl
counter = counter + 1
'Geschwingigkeit h(3) uninteressant
'Kraft
ActiveCell.offset(counter, spalte) = h(2)
'### Weg
ActiveCell.offset(counter, spaltem) = h(4) / 1000#
'ActiveCell.offset(counter, spaltem).NumberFormat = "0.00"
End If
Wend
On Error GoTo 0
'Datei schließen
Close
MsgBox (Format(Time - test, "hh:mm:ss"))

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten schneller einfügen als per activecell.offset
12.02.2004 14:23:43
Wutschka
Versuch doch die Werte direkt zu schreiben,
also nicht ActiveCell, sondern Cells(a,b).Value = Wert
a steht für Zeile und b für Spalte kannst du genauso über einen Zähler hochzählen
Gruß
Tobias
AW: Daten schneller einfügen als per activecell.offset
13.02.2004 14:53:42
Jan
Hallo Tobias,
hab ich auch schon getestet, bringt aber keinen Vorteil. Ich werd vielleicht mal versuchen, die Daten erst in mehrere Ascii-Dateien zu zerstückeln und in die Spalten einzulesen. Falls noch jemand eine bessere Idee hat, bitte melden
Gruß
Jan
Anzeige

39 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige