VBA kullanan Ultimate 1000 ayırıcı

Aug 16 2020

Formül kullanmak mümkün olmadığı ve özel kod ile yapılması gerektiği için 1000 seperatör için VBA çözümü almaya çalışıyorum. Mevcut çözüm, Bin Ayırıcılı ve Gerekirse Ondalıklı Cevap Sayı Formatından alınmıştır.

İşte kod:

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 gibi sayılar için çalışıyor, ancak 1000000 için çalışmıyor. Ayrıca 1000000000 çalışmayacak. Şu anda çözüm üzerinde çalışıyorum, ancak birinin paylaşacak bir şeyi varsa, memnun olurum.

Orijinal çözüm kullanılması durumunda:

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

Yanıtlar

5 SuperSymmetry Aug 16 2020 at 19:40

Bence vba'nın bölgesel ayarlarınızda tanımlanan binlerce ayırıcıya ihtiyacı var. Senin durumunda virgül olduğu için böyle bir şey yapabilirsin

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

Diğer bir yaklaşım, ayırıcıyı kayıt defterinden okumaktır. Bu, farklı bölgesel ortamlarda çalışmalıdır.

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 tarafından önerildiği gibi kullanılacak değiştirilen işlevi Düzenle .

1 TinMan Aug 16 2020 at 23:38

Sayı biçiminizi daha büyük sayıları içerecek şekilde genişletmeniz gerekir.

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