Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1064to1068
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

CSV import - numerische Werte fehlerhaft

CSV import - numerische Werte fehlerhaft
08.04.2009 11:49:12
ISILAN
Hallo wertes Forum,
ich befasse mich nun schon seit längerem mit dem automatischen Einlesen von EEG-Daten, die von den Energieversorgungsunternehmen veröffentlicht werden. (Alle Daten sind also vollkommen öffentlich zugänglich, nichts geheimes hier).
Leider habe ich folgende Fehler noch nicht beheben können. Ein Wert eines jeden Datensatzes beschreibt die installierte Kraftwerksleistung, ist also ein positiver numerischer Wert. Der macht mir Probleme:
Ich habe hier mal vier Rohdatensätze zur Illustration dabei:
Stadtwerke Elmshorn ;"E20148010000000000000003440300001";"25371";2001;§11 Solar;1,900;Keine Angabe;Keine Angabe;Spannungsebene 07 (NS)
Stadtwerke Elmshorn ;"E20148010000000000000003532800001";"25337";2001;§11 Solar;2,160;Keine Angabe;Keine Angabe;Spannungsebene 07 (NS)
Stadtwerke Elmshorn ;"E20148010000000000000003558600001";"25337";2001;§11 Solar;0,850;Keine Angabe;Keine Angabe;Spannungsebene 07 (NS)
Stadtwerke Elmshorn ;"E20148010000000000000006005100001";"25335";2001;§10 Wind;3.000,000;Keine Angabe;Keine Angabe;Spannungsebene 07 (NS)

Nach dem Einlesen bekomme ich folgendes Ergebnis (nur auf die Zahlenwerte achten):
Stadtwerke Elmshorn "E20148010000000000000003440300001" "25371" 2001 §11 Solar 1.900 Keine Angabe Keine Angabe Spannungsebene 07 (NS)
Stadtwerke Elmshorn "E20148010000000000000003532800001" "25337" 2001 §11 Solar 2.160 Keine Angabe Keine Angabe Spannungsebene 07 (NS)
Stadtwerke Elmshorn "E20148010000000000000003558600001" "25337" 2001 §11 Solar 0,850 Keine Angabe Keine Angabe Spannungsebene 07 (NS)
Stadtwerke Elmshorn "E20148010000000000000006005100001" "25335" 2001 §10 Wind 3.000.000 Keine Angabe Keine Angabe Spannungsebene 07 (NS)
Sprich: die Werte Das hat doch irgendwas mit den englischen Formaten zu tun oder?
Meine Einleseprozedur geht wie folgt (hab schon super viel rumgebastelt - Punkt löschen und "0," entfernen - aber trete auf der Stelle), ich hoffe sie ist einigermaßen verständlich.

Function ImportCSV(sDateix As String, sPfadx As String, intCx As Integer)
Dim Arr
Dim Datei
Dim FSO
Dim L As Long
Dim YY As Long
Dim ZZ As Long
Dim Halter As String
Dim Tmp As Variant
Dim vnt_Ausgabe As Variant
Dim I As Integer
Dim Wbk As Workbook
Set FSO = CreateObject("Scripting.FilesystemObject")
'MsgBox sDateix & sPfadx
Set Datei = FSO.OpentextFile(sPfadx & sDateix)
Arr = Split(Datei.readall, vbCrLf) 'Nach Datensätzen splitten wobei vbCrLf bedeutet nichts  _
anderes bedeutet,
'als dass der Cursor an den Anfang einer neuen Zeile  _
gesetzt wird
Datei.Close
ReDim vnt_Ausgabe(UBound(Arr), 10) '10 Spalten müssten genügen
'For YY = 0 To 800
YY = 0
ZZ = 0
For L = 0 To UBound(Arr)
Tmp = Split(Arr(L), ";") 'Jeden Datensatz nach Werten splitten und in den tempöraren Array  _
packen
For I = 0 To UBound(Tmp)
Halter = Tmp(I)
If InStr(1, Tmp(I), ".") Then 'Falls ein Punkt im Datensatz vorkommt
If IsNumeric(Left(Halter, 1)) Then 'Nur Punkt löschen, wenn das erste Zeichen des  _
Strings numerisch ist
ZeichenEntf Halter, "." 'Diesen über hilfsvar = Halter entfernen
Tmp(I) = Halter
YY = YY + 1
End If
End If
If (Left(Halter, 1) = "0") Then
If (Right(Left(Halter, 2), 1) = ",") Then 'Falls der Datensatz mit "0," anfängt
Halter = Right(Halter, Len(Halter) - 1) '0 abschneiden
ZeichenEntf Halter, "," 'Komma entfernen
ZZ = ZZ + 1
End If
End If
vnt_Ausgabe(L, I) = Tmp(I) 'jeden Wert (temporären Array) in das Array vnt_Ausgabe  _
umschaufeln
Next
Next
Debug.Print "Es wurde folgende Anzahl an Datensätzen verändert (Punkt gelöscht): " & YY
Debug.Print "Es wurde folgende Anzahl an Datensätzen verändert (0, gelöscht): " & ZZ
Set Wbk = Workbooks.Add
Application.DisplayAlerts = False
Range("A1").Resize(UBound(vnt_Ausgabe) + 1, UBound(vnt_Ausgabe, 2)) = vnt_Ausgabe 'Alles ab A1  _
reinschreiben
Wbk.SaveAs Filename:=sPfadx & Left(sDateix, Len(sDateix) - 3) & "xls"
'MsgBox "saved as " & sPfadx & Left(sDateix, Len(sDateix) - 3) & "xls"
Wbk.Close
Application.DisplayAlerts = True
ImportCSV = False
End Function


Ich bin um jeden Tipp dankbar...
LG ISILAN

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV import - numerische Werte fehlerhaft
08.04.2009 12:45:22
Luschi
Hallo ISILAN,
versuch es mal damit:

For I = 0 To UBound(Tmp)
Halter = Tmp(I)
'6. Spalte
If I = 5 Then
Tmp(I) = CStr(CDbl(Halter))
Else
'der sonstige vba-Code
End If
Next I

Die CDbl-Funktion wandelt die Werte 1,900 / 3.000.000 korrekt in 1.9 / 3000 um und beim Schreiben der Werte steht dann 1,9 bzw. 3000 in der Zelle.
Vba verlangt das amerikanische Zahlenformat und da muß 1.9 genommen werden statt 1,9.
Gruß von Luschi
aus klein-Paris

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige