在string中包含小数点不起作用

我有一个从欧洲的人那里得到的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 

( 这里的截图,只是为了您的视觉喜悦)

注意:这是在列“H”(所以这是一列,多行)。 您不能将这些添加为数字,或者使用math(do =Sum(H1:H2)返回#VALUE错误)。 第一个数字按照我的需要进行格式化,但是之后的所有数字都不是。 你会注意到它们中有一个空格,十进制标记是逗号,千位分隔符是小数点。 (我知道这是标准的EUR格式)。 使用“文本到列”并select“文本”数据格式,然后“高级”,并告诉小数分隔符是一个空格,千位是小数,什么都不做 – 数字保持不变。

所以,要解决这个问题,我有一个macros,它使用每个单元格作为string,然后删除空格等(注意:使用查找/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 

和function:

 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?

推测发生了什么事情:我认为这与String被视为一个integer或什么东西有关? (这是不对的,但我不知道该怎么说)…我想一个string可以采取任何字符,因此我使用的String 。 我应该改变这是一个LongDouble

你的kvariables不是一个string,所以你将永远不能够连接一个十进制字符。 这是一个长。

这是一个放在一起为你转换数字的爆pipe。 我只是硬编码范围为例如如何处理string。 你可以使用任何你喜欢的技术来进行真实的范围。

 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 

这对你有用吗?

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

用空格和逗号replace空格然后转换为值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 

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