Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1336to1340
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

Übersetzung von Gleitkommazahlen

Übersetzung von Gleitkommazahlen
17.11.2013 12:40:21
Gleitkommazahlen
Hallo Forum.
Ich habe ein Programm, das Daten aus einer csv-Datei ausließt und diese in einem Array speichert.
Die Daten einzelnen Arrayfelder haben Formate wie z.B. "-2.11708671e-011, 1.00000005e-003, 1.00000005e-003, 5.21755600e+000 und 1.19435613e-003"
VBA verwendet für diese Zahlen verschiedene Ausdrücke wie z.B. "-2.11708671e-011(ausgelesenes String) := -2.11708671E-11(VBA), oder 1.00000005e-003 := 0.00100000005"
Wenn ich in anderen Subs mit den Daten rechnen möchte, ergeben sich scheinbar völlig willkürliche Ergebnisse in Bezug auf die Nachkommastellen.
Ich dachte zunächst, das Problem mit einer eindeutigen Definition als Double beherschen zu können, jedoch vergebens. Ich vermute bei rechenoperationen wandelt VBA das string sowieso in ein Double.
Hat jemand eine einfache Lösung? Meine erste Idee war beim einscannen der Daten, die richtige Formatierung via Bedingungen "manuell" einzuführen. Also, eine Bewertung und einteilung der Strings je nach dem Ausdruck nach dem e bei z.B. "-2.11708671e-011".
Jedoch "weiß" VBA genau was ich meine, wenn ich die Werte direkt einer Variablen "a=-2.11708671e-011" zuweise und übersetzt nach Eingabe in "a=-2.11708671E-11". Wieso funktioniert das nicht wenn ich einer Variablen (Dim As Double) einer anderen mit dem String drin zuweise?
Wie kann ich eine Übersetzung "erzwingen"?
Hier mein Code:

Option Explicit
Public Array_SL() As Variant
Public objArr As Variant
Public maxrow As Variant
Sub Import_Streamlines_v2()
Dim arr
Dim objTS As Object
Dim objFS As Object
Dim objFile As Object
Dim Tmp As Variant
Dim Tmp_double As Double
Dim Dat_Ausgabe As Variant
Dim path_data As Variant
Dim path_i As String
Dim path_wb As String
Dim Str_String As String
Dim i, k, l, w As Integer
Dim intFile As Variant
ReDim Array_SL(anzStrlin - 1)
ReDim maxrow(anzStrlin - 1)
Set objArr = CreateObject("Scripting.dictionary")
Set objFS = CreateObject("Scripting.FilesystemObject")
path_wb = ThisWorkbook.Path
path_data = Dir("C:\Users\test*.csv")
'MsgBox path_wb
Do While path_data  ""
i = i + 1
k = 1
For i = 1 To anzStrlin
path_i = path_wb & "\test_" & i & ".csv"
'        MsgBox path_i
Set objFile = objFS.Getfile(path_i) 'Anpassen
Set objTS = objFile.OpenAsTextStream
Str_String = objTS.readall
arr = Split(Str_String, vbCrLf) 'Nach Datensätzen splitten
ReDim Dat_Ausgabe(UBound(arr), 4)
For l = 5 To UBound(arr)
Tmp = Split(arr(l), ",") 'Datensatz nach Werten splittenn
For w = 0 To UBound(Tmp)
Tmp(w) = Replace(Tmp(w), """", "")
Tmp_double = Tmp(w)
Dat_Ausgabe(l - 5, w) = Tmp_double 'Werte in Dat_Ausgabe
Next w
Next l
'Ausgeben
'In Tabelle
' Sheets("Input_Flutlinien").Cells(3, k).Resize(UBound(Dat_Ausgabe) + 1, UBound( _
Dat_Ausgabe, 2)) = Dat_Ausgabe
'Ausgabe in Dictionary
ReDim Preserve Array_SL(anzStrlin - 1)
ReDim Preserve maxrow(anzStrlin - 1)
maxrow(i - 1) = UBound(Dat_Ausgabe)
Array_SL(i - 1) = Dat_Ausgabe
k = k + 6
Next
path_data = Dir
Loop
End Sub
Ich freue mich um hilfreiche Antworten.
VG Kapitän

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

Betreff
Datum
Anwender
Anzeige
Quick'n'dirty
17.11.2013 13:24:37
Erich
Hi Vorname,
ohne Beispielmappe, Testdaten, Test... :-(
Probier mal
Tmp(w) = Replace(Tmp(w), ".", ",")
nach
Tmp(w) = Replace(Tmp(w), """", ",")
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: Quick'n'dirty
17.11.2013 17:41:37
Kapitän
Hi Erich,
Prima! So klappt's! Auf die Idee wäre ich nicht gekommen, weil die Einträge im Array bereits mit ".", anstelle des ","s geschrieben standen.
Vielen Dank!
VG
Kapitän

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige