Разделитель Ultimate 1000 с использованием VBA
Я пытаюсь получить решение VBA для разделителя 1000, поскольку в моем случае невозможно использовать формулу и это должно выполняться с помощью специального кода. Текущее решение взято из формата чисел ответа с разделителем тысяч и десятичным числом, если необходимо
Вот код:
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
Он работает для таких чисел, как 1000, но не работает для 1000000. Также 1000000000 не будет работать. В настоящее время я работаю над решением, но если кому-то есть чем поделиться, я буду признателен.
В случае использования оригинального решения:
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

Ответы
Я думаю, что vba нужен разделитель тысяч, который определен в ваших региональных настройках. Поскольку в вашем случае это запятая, вы можете сделать что-то вроде этого
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
Другой подход - прочитать разделитель из реестра. Это должно работать в разных региональных настройках.
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
Изменить измененную функцию для использования Application.International
в соответствии с предложением @RonRosenfeld.
Вам необходимо расширить числовой формат, чтобы включить в него более крупные числа.
### ### ## 0 ","
