我有一张来自欧洲某人的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
。我应该将其更改为Long
或Double
吗?
答案 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