VBA Double as String with逗号而不是点

时间:2015-01-12 15:29:11

标签: vba excel-vba format excel

我正在寻找将double转换为字符串的解决方案,但字符串在小数位前应该有逗号,而不是点。

"一个半"应该这样看1,5(德语表示法)。

感谢您的帮助!!

5 个答案:

答案 0 :(得分:4)

不幸的是,在VBA中,您无法轻松编写与语言环境无关的代码。也就是说,当您进行CStr投射时,您无法指定区域设置。

一种解决方法是将像0.5这样的双精度转换为字符串,然后查看最终结果。如果您最终使用0,5,那么您将使用德语(等)语言环境,并且您不需要执行任何其他操作。

如果你最终得到0.5,那么你知道你需要进行转换。然后你只需要遍历你的字符串,用逗号代替点,反之亦然(反之亦然,如果你的字符串有数千个分隔符,则很重要)。您可以使用Replace

答案 1 :(得分:3)

CStr和Replace的组合将完成这项工作。

Function Dbl2Str(dbl As Double) As String
    Dbl2Str = Replace(CStr(dbl), ".", ",")
End Function

答案 2 :(得分:1)

根据RubberDuck评论,我最终得到了这个:

Function DblToStr(x As Double)
 DblToStr = CStr(x)

 If (Application.ThousandsSeparator = ".") Then
  DblToStr = Replace(DblToStr, ".", "")
 End If
 If (Application.DecimalSeparator = ".") Then
  DblToStr = Replace(DblToStr, ".", ",")
 End If

End Function

答案 3 :(得分:0)

选择要转换的单元格并运行此小宏:

Sub changeIT()
    For Each r In Selection
        t = r.Text
        If InStr(1, r, ".") > 0 Then
            r.Clear
            r.NumberFormat = "@"
            r.Value = Replace(t, ".", ",")
        End If
    Next r
End Sub

只有那些&#34;。&#34; 的单元格才会更改,而且 Strings 而非双打 < / p>

答案 4 :(得分:0)

我检查了其他答案,但最终编写了自己的解决方案,使用以下代码将1500.5之类的用户输入转换为1,500.50

'
' Separates real-numbers by "," and adds "." before decimals
'
Function FormatNumber(ByVal v As Double) As String
    Dim s$, pos&
    Dim r$, i&

    ' Find decimal point
    s = CStr(v)
    pos = InStrRev(s, ".")
    If pos <= 0 Then
        pos = InStrRev(s, ",")
        If pos > 0 Then
            Mid$(s, pos, 1) = "."
        Else
            pos = Len(s) + 1
        End If
    End If

    ' Separate numbers into "r"
    On Error Resume Next
    i = pos - 3
    r = Mid$(s, i, 3)
    For i = i - 3 To 1 Step -3
        r = Mid$(s, i, 3) & "," & r
    Next i
    If i < 1 Then
        r = Mid$(s, 1, 2 + i) & "," & r
    End If

    ' Store dot and decimal numbers into "s"
    s = Mid$(s, pos)
    i = Len(s)
    If i = 2 Then
        s = s & "0"
    ElseIf i <= 0 Then
        s = ".00"
    End If

    ' Append decimals and return
    FormatNumber = r & s
End Function