在不起作用的字符串中包含小数

时间:2015-09-08 21:20:41

标签: excel excel-vba vba

我有一张来自欧洲某人的excel表格,所以数字格式很时髦:

18890.00
18 644
19 264
19 318
19 113,6
7 407,75
17 988,75
14 456
19.168
18 922
19 504,5
18 310,29375

(截图here,仅供您视觉享受)

注意:列" H" (所以它是一列,多行)。您无法将这些数字添加为数字,或使用数学(执行=Sum(H1:H2)会返回#VALUE错误)。第一个数字的格式就像我需要的那样 - 然而,之后的所有数字都不是。您会注意到其中有空格,小数点是逗号,千位分隔符是小数。 (我知道这是标准的欧元格式)。使用"文本到列"并选择" Text"数据格式,然后"高级"告诉它小数分隔符是一个空格,千位是小数,什么都不做 - 数字保持不变。

所以,为了解决这个问题,我有一个宏,它将每个单元格用作字符串,然后删除空格等(注意:使用" "上的find / replace并不能自行工作) 。当数字没有小数时,它工作得很好。但是,当它击中带小数的数字时,它不会包含它。

这是我的代码:

Sub format_Worksheet()
Dim cel as Range, rng as Range
Set rng = ("A1:A10")

For each cel in rng
     cel.value = Change_Weight_to_Proper_Numbers(cel.value)
next cel

End Sub

和功能:

Private Function Change_Weight_to_Proper_Numbers(val As String)
Dim cel As Range
Dim str$, slice$
Dim i&, k&

For i = 1 To Len(val)
    slice = Mid(val, i, 1)
    Debug.Print slice
    If slice <> " " And slice <> "," And slice <> "." Then
        k = k & slice
    End If
    If slice = "," Or slice = "." Then
        k = k & "."  '  HERE! This line DOES run, but there's no decimal added to the string??
    End If
    Debug.Print "So far you have: " & k
Next i

Debug.Print Trim(k)

Change_Weight_to_Proper_Numbers = Trim(k)

End Function

同样,当数字为1 293 999时,这种情况正常,但在1 293 99.90时却没有。它在我的循环中完全忽略了.。添加小数运行的行,但小数不会添加到字符串??

猜测发生了什么:我认为它与String被视为integer之类的东西有什么关系? (那不对,但我不知道怎么说)......我认为一个字符串可以占用任何角色,因此我使用String。我应该将其更改为LongDouble吗?

3 个答案:

答案 0 :(得分:1)

您的k变量不是字符串,因此您永远无法将十进制字符连接到它。这很长。

这是我一起为你转换数字的爆管。我只是硬编码了范围,例如如何处理字符串。您可以使用任何您喜欢的技术来实现真实范围。

Public Sub ConvertNumbers2US()
    Dim i&, s$, v
    v = [a1:a12]
    For i = 1 To UBound(v)
        s = v(i, 1)
        s = Replace(s, Chr$(160), "")
        s = Replace(s, " ", "")
        s = Replace(s, ".", "")
        s = Replace(s, ",", ".")
        v(i, 1) = Val(s)
    Next
    [b1:b12] = v
End Sub

答案 1 :(得分:0)

这对你有用吗?

=VALUE(SUBSTITUTE(SUBSTITUTE(A1,",","")," ",""))

替换任何空格和逗号,然后为我转换为1 293 99.90返回的值129399.9

18890           18890
18 644          18644
19 264          19264
19 318.02       19318.02
19 113,6        191136
7 407,75        740775
17 988,75       1798875
14 456          14456
19.168          19.168
18 922          18922
19 504,5        195045
18 310,29375    1831029375
1 293 99.90     129399.9

答案 2 :(得分:0)

在原始文件中尝试=(字段)+0

相关问题