Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zahl aus CSV-Datei in zu verwendende Zahl wandeln?

Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 08:19:56
Kasimir
Hallo Leute!
Ich habe da eine Optimierungsfrage. Ich lese über ein Makro Daten aus einer CSV-Datei ein. Diese enthält u.a. Temperaturwerte, die ich auswerten will/ muss. Nun ist das Problem, dass der Wert zwar als Zahl eingelesen wird, aber für z.B. ein Diagramm so nicht verwertbar ist, da die Zahl nicht als Zahl erkannt wird. Daher überschreibe ich die Zahlen durch ein Makro mit den eigenen Werten, so dass aus der nicht zu verwendeten Zahl eine zu verwendende Zahl wird, ähnlich dem Prozedere, wenn ich die F2 und danach die Enter-Taste betätigen würde. Nachfolgend mal den Makroschnipsel:
With wksQuelldaten
For Each rngCell In .Range("C1:ER" & intLastRowJahresübersicht)
With rngCell
.NumberFormat = "General"
If IsNumeric(.Text) Then
.Value = CDbl(.Text)
End If
End With
Next
End With
Allerdings dauert diese Methode recht lange, da hier doch reichlich Spalten und auch viele Zeilen (bis zu 10.000 Zeilen) durchlaufen werden. Meine Frage nun, gibt es noch eine schnellere Methode um das zu erreichen, was der obige Makrocode in doch recht langsamer Zeit erreicht?
Danke Euch schon mal für Eure Hilfe,
Kasimir

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

Betreff
Datum
Anwender
Anzeige
AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 09:25:20
Martin
Hallo Kasimir,
es ist besser die Daten in einem Datenfeld (Array) zu bearbeiten als auf jede Zelle einzeln zuzugreifen. Teste mal bitte folgenden Code:
    Dim arrData As Variant
Dim i As Long, j As Long
With wksQuelldaten
arrData = .Range("C1:ER" & intLastRowJahresübersicht).Values
For i = l To UBound(arrData, 1)
For j = 1 To UBound(arrData, 2)
arrData(i, j) = CDbl(arrData(i, j))
Next
Next i
With .Range("C1").Resize(UBound(arrData, 1), UBound(arrData, 2))
.NumberFormat = "General" 'Bitte testen, ob es diese Zeile notwendig ist
.Value = arrData
End With
End With
Viele Grüße
Martin

Anzeige
AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 09:33:49
Martin
Hallo Kasimir,
ein kleiner Fehler hat sich eingeschlichen, das Wort ".Values" in der Zuweisung des Datenfeldes erzeugt vermutlich einen Makrofehler. Probiere es besser so:
    Dim arrData As Variant
Dim i As Long, j As Long
With wksQuelldaten
arrData = .Range("C1:ER" & intLastRowJahresübersicht)
For i = l To UBound(arrData, 1)
For j = 1 To UBound(arrData, 2)
arrData(i, j) = CDbl(arrData(i, j))
Next
Next i
With .Range("C1").Resize(UBound(arrData, 1), UBound(arrData, 2))
.NumberFormat = "General" 'Bitte testen, ob es diese Zeile notwendig ist
.Value = arrData
End With
End With
Viele Grüße
Martin

Anzeige
AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 09:56:49
JoWE
Hallo Kasimir,
evtl. geht's auch so?
Vorsicht, echter Text wird in Nullen umgewandelt!
Sub txt2num()
intLastRowJahresübersicht = 77
Application.CutCopyMode = False
'diese Zelle muss das Format "Standard" besitzen
Range("A1").Copy
'dieser Bereich enthält nur als Text importierte numerische Werte
'Achtung: Text wird sonst zu 0 (Null)
Range("C1:ER" & intLastRowJahresübersicht).PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd
Application.CutCopyMode = False
End Sub
Gruß
Jochen

AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 11:26:28
fcs
Hallo Kasimir,
ich denke, dass du beim Einlesen der Daten aus der CSV-Datei Verbesserungspotential hast.
Wenn man den Weg via Menü "Daten" - Externe Daten abrufen - aus Text geht kann man sehr flexible alle möglichen Parameter einstellen. Dies kann man auch per Makrorecorder aufzeichnen.
Evtl. reicht es auch schon, wenn du beim Öffnen der CSV-Datei per Makro den Parameter "Local" auf True setzt, wenn die CSV-Datei mit Semicolon als Trennzeichen und Komma als Dezimalzeichen erstellt ist.
Gruß
Franz

Anzeige
AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 12:53:17
Uwe
Hallo Martin,
Sub Test_2()
Dim Bereich As Range
Dim leZeile As Long
Application.ScreenUpdating = False
leZeile = Range("C65536").End(xlUp).Row
Set Bereich = Range("C1:ER" & leZeile)
Bereich.NumberFormat = "0.00"
Application.ScreenUpdating = True
End Sub
wandelt als Text gespeicherte Zahlen recht schnell in eine Zahl um.
Gruß Uwe

AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 16:03:13
Kasimir
Hallo an alle!
Erst mal sorry, dass ich erst so spät reagiere, aber ich hatte vorher keine Zeit. Dann danke für die Unterstützung. Allerdings bringt keine Lösung das erhoffte Ergebnis. Das liegt aber auch an mir. ich hatte vergessen zu sagen, dass nicht alle Spalten Zahlen erhalten. Es gibt auch reichlich Spalten, die Text erhalten.
@Martin: Deine Lösung läuft in einen Fehler, da eben, wie oben erwähnt, nicht alle Zellen Zahlen, sondern auch welche Text erhalten.
@Uwe: Leider bringt mir das nichts, da hier nur das Format geändert wird, aber nicht die Zahl als Zahl umgestellt wird.
@Franz: Am Einfügen der CSV-Daten glaube ich liegt es nicht.. Wobei ich auch nicht so ganz weiß, was Du mit Local auf True setzen meinst.
Ich habe mal eine Datei hochgeladen, an der man das eventuell nachvollziehen kann.
https://www.herber.de/bbs/user/89056.xls
Es geht mir hier im speziellen um z.B. die Spalten G und J, also um die Ist- und Solltemperaturen. Eventuell hat ja noch jemand Lust, sich die Sache anzusehen.
Danke nochmal,
Kasimir

Anzeige
AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 16:17:07
Uwe
Hi kasimir,
habs mal an Spalte G getestet und funktioniert.
Sub Text_in_Zahl()
Dim x As Long
Dim LeZeile As Long
LeZeile = Range("G65536").End(xlUp).Row
For x = 2 To LeZeile
Cells(x, 7).NumberFormat = "General"
Cells(x, 7).NumberFormat = "0.00"
Cells(x, 7) = CSng(Cells(x, 7))
Next
End Sub

AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 16:40:25
Kasimir
Hallo Uwe!
Danke Dir für den Lösungsversuch, der auch funktioniert. Nur leider dauert der Code bei 148 Spalten und im Moment 2733 Zeilen genauso lange wie mein Code, der in meiner Fragestellung aufgeführt ist.
Trotzdem nochmal Danke für die Hilfe,
Kasimir

Anzeige
AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 18:37:41
JoWE
Hallo Kasimir,
vllt. geht's mit einem Array:
Sub changetxt2num()
Dim myarray As Variant
Dim i As Long
Dim lz As Long
lz = Cells(Rows.Count, 7).End(xlUp).Row
myarray = Range("G2:G100").Value
For i = 1 To UBound(myarray)
myarray(i, 1) = myarray(i, 1) * 1
Next
Range("J2:J100") = myarray
myarray = Range("G2:G100").Value
For i = 1 To UBound(myarray)
myarray(i, 1) = myarray(i, 1) * 1
Next
Range("G2:G100") = myarray
End Sub

Gruß
Jochen

AW: Korrektur
01.02.2014 18:41:38
JoWE
... im Teil 2 muss der Range noch in "J2:J100" korrigiert werden!
Sub changetxt2num()
Dim myarray As Variant
Dim i As Long
Dim lz As Long
lz = Cells(Rows.Count, 7).End(xlUp).Row
myarray = Range("G2:G100").Value
For i = 1 To UBound(myarray)
myarray(i, 1) = myarray(i, 1) * 1
Next
Range("J2:J100") = myarray
myarray = Range("G2:G100").Value
For i = 1 To UBound(myarray)
myarray(i, 1) = myarray(i, 1) * 1
Next
Range("G2:G100") = myarray
End Sub

Anzeige
AW: Korrektur
01.02.2014 18:57:52
Kasimir
Hallo Jochen!
Danke Dir für Deine Lösung. Mit ein paar kleinen Änderungen funktioniert der Code super und schnell. Das Gleiche gilt übrigens auch für den Code von Martin. Auch der funktioniert im Nachhinein mit ein paar Änderungen tadellos und schnell.
Nochmal besten Dank an alle, die geholfen haben und noch ein schönes Wochenende
Kasimir

AW: Zahl aus CSV-Datei in zu verwendende Zahl wandeln?
01.02.2014 19:02:40
JoWE
sorry für das hin und her...
aber so sollte es nun aber klappen
Sub changetxt2num()
Dim myarray As Variant
Dim i As Long
Dim lz As Long
lz = Cells(Rows.Count, 7).End(xlUp).Row
myarray = Range("G2:G100").Value
For i = 1 To UBound(myarray)
myarray(i, 1) = myarray(i, 1) * 1
Next
Range("G2:G100") = myarray
Erase myarray
myarray = Range("J2:J100").Value
For i = 1 To UBound(myarray)
myarray(i, 1) = myarray(i, 1) * 1
Next
Range("J2:J100") = myarray
Erase myarray
myarray = Range("K2:K100").Value
For i = 1 To UBound(myarray)
myarray(i, 1) = Replace(myarray(i, 1), ".", ",")
Next
Range("K2:K100") = myarray
Erase myarray
End Sub

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige