Ultimate 1000 Separator mit VBA

Aug 16 2020

Ich habe versucht, eine VBA-Lösung für 1000 Separator zu erhalten, da in meinem Fall die Verwendung der Formel nicht möglich ist und mit benutzerdefiniertem Code erfolgen sollte. Die aktuelle Lösung wird aus dem Antwortnummernformat mit Tausendertrennzeichen und Dezimalzahl entnommen, falls erforderlich

Hier ist der Code:

Function CustomFormat(InputValue As Double) As String
    CustomFormat = Format(InputValue, "# ###")
    If (Right(CustomFormat, 1) = ".") Then
        CustomFormat = Left(CustomFormat, Len(CustomFormat) - 1)
    End If
End Function

Es funktioniert für Zahlen wie 1000, aber es funktioniert nicht für 1000000. Auch 1000000000 wird nicht funktionieren. Ich arbeite derzeit an einer Lösung, aber wenn jemand etwas zu teilen hat, wäre er dankbar.

Bei Verwendung der Originallösung:

Function CustomFormat(InputValue As Double) As String
    CustomFormat = Format(InputValue, "#,###.##")
    If (Right(CustomFormat, 1) = ".") Then
        CustomFormat = Left(CustomFormat, Len(CustomFormat) - 1)
    End If
End Function

Antworten

5 SuperSymmetry Aug 16 2020 at 19:40

Ich denke, vba braucht den Tausendertrenner, der in Ihren regionalen Einstellungen definiert ist. Da es in Ihrem Fall ein Komma ist, können Sie so etwas tun

Function CustomFormat(InputValue As Double) As String
    CustomFormat = Format(InputValue, "#,###")
    If (Right(CustomFormat, 1) = ".") Then
        CustomFormat = Left(CustomFormat, Len(CustomFormat) - 1)
    End If
    CustomFormat = Replace(CustomFormat, ",", " ")
End Function

Ein anderer Ansatz besteht darin, das Trennzeichen aus der Registrierung zu lesen. Dies sollte in verschiedenen regionalen Umgebungen funktionieren.

Function CustomFormat(InputValue As Double) As String
    Dim sThousandsSep As String
    Dim sDecimalSep As String
    Dim sFormat As String
    
    sThousandsSep = Application.International(xlThousandsSeparator)
    sDecimalSep = Application.International(xlDecimalSeparator)
    
    ' Up to 6 decimal places
    sFormat = "#" & sThousandsSep & "###" & sDecimalSep & "######"
    
    CustomFormat = Format(InputValue, sFormat)
    If (Right$(CustomFormat, 1) = sDecimalSep) Then CustomFormat = Left$(CustomFormat, Len(CustomFormat) - 1)
    End If
    
    ' Replace the thousands separator with a space
    ' or any other character
    CustomFormat = Replace(CustomFormat, sThousandsSep, " ")
End Function

Bearbeiten Sie die geänderte Funktion, um sie Application.Internationalwie von @RonRosenfeld vorgeschlagen zu verwenden.

1 TinMan Aug 16 2020 at 23:38

Sie müssen Ihr Zahlenformat um die größeren Zahlen erweitern.

### ### ## 0 ","