PDA

Vollständige Version anzeigen : Typkonvertierungsfunktionen CDbl


Saerdna61
18.08.2017, 07:17
Hallo zusammen,

die Typkonvertierungsfunktionen CDbl treibt mich gerade in den Wahnsinn. :mad:

Habe den nachfolgenden Code zum Testen erstellt um nach dem einlesen aus einem Array in ein Sheet die Werte in Text in nummerische Werte umzuwandeln um damit weiterrechnen zu können.



Sub Test()
Dim letzteZeile As Integer ' Variable für die letzte Zeile im Arbeitsblatt Import
Dim Zähler As Long ' Variabel für den For-Zähler

letzteZeile = Import.Cells(Rows.Count, 1).End(xlUp).Row + 1 ' Letzte belegte Zeile im Arbeitsblatt Import holen

For Zähler = 4 To letzteZeile
With Cells(Zähler, 4)
If Not IsEmpty(.Value) Then
.Value = CDbl(.Cells(Zähler, 4).Value)
.NumberFormat = "General"
End If
End With
Next Zähler
End Sub



Nach den Ausführung des Codes ersetzt "er" mir die ursprünglichen Werte in der Spalte 4 durch eine Null "0". :boah:

Wenn ich eine einzelne Zelle (hier Zelle 5,4 ) mit dem Code

Cells(5, 4).Value = CDbl(Cells(5, 4).Value)

umwandle, funktioniert alles so wie es sein soll.

Hat jemand eine Idee?

Viele Grüße

Andreas

Fennek11
18.08.2017, 07:23
Hallo,

"CDbl()" wird meistens genutzt, um diverse Datumsformate in Basiszahl (jetzt ca 42.xxx, Anzahl der Tage seit 1.1.1900) umzuwandeln.

Um die Frage besser beurteilen zu können, zeige bitte einige Bsp, was gewandelt werden soll. In der Frage kommt das Wort "Text" vor, jedenfalle kann man einen normalen Text (also kein Datum) nicht mit "CDbl" wandeln.

mfg

hary
18.08.2017, 07:28
Moin
Du hast hier
CDbl(.Cells(Zähler, 4).Value)
einen Punkt vor Cells gesetzt!! Nimm diesen mal weg.
In diesem Teil
Cells(5, 4).Value = CDbl(Cells(5, 4).Value)
ist kein Punkt vor Cells.
gruss hary

Saerdna61
18.08.2017, 07:31
Hmm..laut MS gibt es für die Funktion CDbl() keine Einschränkung auf das Datum. In der Hilfe steht jedenfalls nichts davon.

Wahrscheinlich meinst Du die CDate-Funktion.

Die Funktion CDbl() funktioniert ja wenn ich sie einzeln anwende. Sobald ich aber eine Schleife einsetze, funktioniert es nicht mehr.

...und ja, es handelt sich um reinen Text (also kein Datum)

Saerdna61
18.08.2017, 07:35
Hallo hary,

DANKE DASS war es.:) Nun bin ich aber etwas perplex. Mit With benötige ich doch normalerweise den Punkt......:eek:

Viele Grüße und nochmals Danke :)

Andreas

hary
18.08.2017, 07:39
Moin
Mit With benötige ich doch normalerweise den Punkt
Richtig, dann muss es aber so geschrieben sein.
.Value = CDbl(.Value)
gruss hary

Saerdna61
18.08.2017, 07:45
Hm...nachdem ich nun die Lösung von Dir habe und nochmals in Ruhe darüber nachdenke, hast DU VOLLKOMMEN RECHT! :)

Ein kleiner Punkt, der mich fast verzweifeln lies....Sachen gibt's. :grins:

Euch allen eine schönen Restfreitag und Grüße

Andreas

Sodele den Code noch etwas verfeinert um gleich die für mich "richtige" Zahlenformatierung zu haben.


For Zähler = 4 To letzteZeile
With Cells(Zähler, 4)
If Not IsEmpty(.Value) Then
.Value = CDbl(Cells(Zähler, 4).Value)
.NumberFormat = "0.00"
End If
End With
Next Zähler

hary
18.08.2017, 08:01
Moin
Ein kleiner Punkt, der mich fast verzweifeln lies....Sachen gibt's
Da bist du nicht der einzige.
War mal bei mir, nur anders rum.
"Kleiner" Fliegenschiss an der richtigen Stelle auf dem Bildschirm und ich hab mich bloede gesucht.
gruss hary

Luschi
18.08.2017, 19:21
Hallo Andreas,

genauso richtig und besser lesbar ist: .Value = CDbl(.Value)
da With ja schon auf die gewünschte Zelle verweist.

Gruß von Luschi
aus klein-Paris