Séparateur ultime 1000 utilisant VBA

Aug 16 2020

J'ai essayé d'obtenir une solution VBA pour séparateur 1000 car dans mon cas, il n'est pas possible d'utiliser la formule et devrait être fait avec un code personnalisé. La solution actuelle est tirée du format numérique de réponse avec séparateur de milliers et décimal si nécessaire

Voici le 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

Cela fonctionne pour des nombres comme 1000, mais cela ne fonctionne pas pour 1000000. De plus, 1000000000 ne fonctionnera pas. Je travaille actuellement sur une solution, mais si quelqu'un a quelque chose à partager, ce serait apprécié.

En cas d'utilisation de la solution d'origine:

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

Réponses

5 SuperSymmetry Aug 16 2020 at 19:40

Je pense que vba a besoin du séparateur de milliers défini dans vos paramètres régionaux. Comme il s'agit d'une virgule dans votre cas, vous pouvez faire quelque chose comme ça

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

Une autre approche consiste à lire le séparateur du registre. Cela devrait fonctionner dans différents contextes régionaux.

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

Modifier Fonction Application.Internationalmodifiée à utiliser comme suggéré par @RonRosenfeld.

1 TinMan Aug 16 2020 at 23:38

Vous devez étendre votre format de nombre pour inclure les plus grands nombres.

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