Separador Ultimate 1000 usando VBA
Tenho tentado obter uma solução VBA para o separador 1000, pois no meu caso não é possível usar a fórmula e deve ser feito com código personalizado. A solução atual é obtida do Formato de Número de Resposta com Separador de Milhares e Decimal, se necessário
Aqui está o código:
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
Está funcionando para números como 1000, mas não funciona para 1000000. Além disso, 1000000000 não funcionará. Atualmente estou trabalhando em uma solução, mas se alguém tiver algo a compartilhar, ficaria grato.
Em caso de uso de solução original:
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

Respostas
Eu acho que vba precisa do separador de milhares que é definido em suas configurações regionais. Já que é uma vírgula no seu caso, você pode fazer algo assim
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
Outra abordagem é ler o separador do registro. Isso deve funcionar em diferentes configurações regionais.
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
Editar função alterada para usar Application.International
conforme sugerido por @RonRosenfeld.
Você precisa estender seu formato de número para incluir os números maiores.
### ### ## 0 ","
