Excel/VBA Zahl in String konvertieren, Komma durch Punkt ersetzen

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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.


nado121 
Beitragsersteller
 16.02.2011, 15:50

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...

0

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.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

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