Ultimate 1000 Separator mit VBA
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
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.
Sie müssen Ihr Zahlenformat um die größeren Zahlen erweitern.
### ### ## 0 ","