VBA를 사용하는 Ultimate 1000 구분 기호
내 경우에는 수식을 사용할 수 없으며 사용자 지정 코드로 수행해야하므로 1000 구분 기호에 대한 VBA 솔루션을 얻으려고 노력했습니다. 현재 솔루션은 필요한 경우 수천 개의 구분 기호 및 십진수를 사용하는 숫자 형식 에서 가져옵니다.
다음은 코드입니다.
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
답변
5 SuperSymmetry
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가 제안한대로 사용하도록 변경된 기능을 편집합니다 .
1 TinMan
더 큰 숫자를 포함하려면 숫자 형식을 확장해야합니다.
### ### ## 0 ","