Excel/VBA Zahl in String konvertieren, Komma durch Punkt ersetzen
Hallo,
ich habe in einer Tabelle eine Spalte voller Einträge zweier verschiedener Typen:
- Strings der Form #.#.# wobei # eine Ziffer darstellt
- Zahlen der Form # bzw #,#
Ich möchte erstere Form beibehalten und die zweite in einen String der Form #.# umwandeln. Kann mir da jemand helfen?
5 Antworten

Wenn ich dich richtig verstehe:
S = Format(Cells(I,J),"")
If Instr(S,",") > 0 then
Cells(I,J) = S
end if
Gruß Ragnar

In einer Zahl, mit der Excel rechnet ist der Punkt der Trennung der Tausender vorbehalten. Dezimalstellen immer als Komma. Die einzigste Art, das zu rsetzen ist, die Zelle als Text zu formatieren. Allerdings lässt sich damit nicht mehr rechnen. Es gibt eine theoretische Möglichkeit, mit den Zahlen in Blindfeldern zu rechnen un sie dann als Text darzstellen,aber das wäre so aufwendig, das ich nicht mal darüber nachdenken würde.

Damit wird nicht mehr gerechnet. Ich suche eben nach einer Lösung für die Konvertierung in einen String. Wenn ich allerdings per Str() die Spalte durchgehe, zerlegt es mir die Einträge der ersten Form, da werden dann alle Punkte gelöscht...

Hier einCode, der das komplett übernimmt. Zur besseren Sichtbarkeit wird als Tausenderpunkt # genommen, als Komma Ö und für einen festen Nachkommateile bei glatten Zahlen XX
Public Function Zahl_Formatiert(EingabeZahl As String)
On Error GoTo Z_F_Error
Dim I As Double
Dim Check_Char As String
Dim Komma_Pos As Double
Dim DezimalTeil As String
Dim GanzZahlTeil As String
Dim GanzZZiffern As Double
Dim GanzZTausend(10) As String
Dim Strikes As Double
Dim TausendString As String
Dim Test
If EingabeZahl <> "" Then
DezimalTeil = "XX"
If EingabeZahl <> Int(EingabeZahl) Then
'Dezimalteil Abtrennen
For I = 1 To Len(EingabeZahl)Check_Char = Mid(EingabeZahl, I, 1)If Check_Char = "," ThenKomma_Pos = II = Len(EingabeZahl)DezimalTeil = Mid(EingabeZahl, Komma_Pos + 1, Len(EingabeZahl))End If
Next I
End If
GanzZahlTeil = Val(EingabeZahl)
GanzZZiffern = Len(GanzZahlTeil)
GanzZTausend(1) = Mid(GanzZahlTeil, 1, GanzZZiffern Mod 3)
Strikes = 2
For I = (GanzZZiffern Mod 3) + 1 To GanzZZiffern Step 3
GanzZTausend(Strikes) = "#" & Mid(GanzZahlTeil, I, 3)
Strikes = Strikes + 1
Next I
If GanzZZiffern = 0 Then GanzZTausend(1) = "0"
TausendString = GanzZTausend(1)
For I = 2 To 10
If GanzZTausend(I) <> "" ThenTausendString = TausendString & GanzZTausend(I)
End If
Next I
If Left(TausendString, 1) = "." Then
TausendString = Mid(TausendString, 2, GanzZZiffern + Strikes)
End If
Zahl_Formatiert = Trim(TausendString & "Ö" & DezimalTeil)
Else
Zahl_Formatiert = "Error"
End If
Exit Function
Z_F_Error:
Zahl_Formatiert = "Error"
End Function

Du schreibst Excel/VBA, daraus schließe ich, dass es nicht unbedingt VBA sein muss.
Diese Formel in einer Hilfsspalte sollte es auch tun, wenn ich Dich richtig verstehe:
=WECHSELN(A1;",";".";1)
Ist simpel, aber wenn die Formate wirklich exakt SO sind, klappt es.
Falls ich es falsch verstanden habe, frage nochmal nach.

Nochmals ohne die gliedernden Leerstellen am Beginn:
Public Function Zahl_Formatiert(EingabeZahl As String)
On Error GoTo Z_F_Error
Dim I As Double
Dim Check_Char As String
Dim Komma_Pos As Double
Dim DezimalTeil As String
Dim GanzZahlTeil As String
Dim GanzZZiffern As Double
Dim GanzZTausend(10) As String
Dim Strikes As Double
Dim TausendString As String
Dim Test
If EingabeZahl <> "" Then
DezimalTeil = "XX"
If EingabeZahl <> Int(EingabeZahl) Then
'Dezimalteil Abtrennen
For I = 1 To Len(EingabeZahl)
Check_Char = Mid(EingabeZahl, I, 1)
If Check_Char = "," Then
Komma_Pos = I
I = Len(EingabeZahl)
DezimalTeil = Mid(EingabeZahl, Komma_Pos + 1, Len(EingabeZahl))
End If
Next I
End If
GanzZahlTeil = Val(EingabeZahl)
GanzZZiffern = Len(GanzZahlTeil)
GanzZTausend(1) = Mid(GanzZahlTeil, 1, GanzZZiffern Mod 3)
Strikes = 2
For I = (GanzZZiffern Mod 3) + 1 To GanzZZiffern Step 3
GanzZTausend(Strikes) = "#" & Mid(GanzZahlTeil, I, 3)
Strikes = Strikes + 1
Next I
If GanzZZiffern = 0 Then GanzZTausend(1) = "0"
TausendString = GanzZTausend(1)
For I = 2 To 10
If GanzZTausend(I) <> "" Then
TausendString = TausendString & GanzZTausend(I)
End If
Next I
If Left(TausendString, 1) = "." Then
TausendString = Mid(TausendString, 2, GanzZZiffern + Strikes)
End If
Zahl_Formatiert = Trim(TausendString & "Ö" & DezimalTeil)
Else
Zahl_Formatiert = "Error"
End If
Exit Function
Z_F_Error:
Zahl_Formatiert = "Error"
End Function