在Excel VBA中将存储为文本的数字转换为数字的最简单方法

时间:2015-11-27 07:10:59

标签: excel vba excel-vba

我尝试将此文本转换为数字:

enter image description here

我尝试了不同的公式,但Excel无法识别格式。 但是,使用下面的代码只转换前三个数字并删除其余数字。

Sub ConvertTextNumberToNumber()
For Each WS In Sheets
    On Error Resume Next
    For Each r In WS.UsedRange.SpecialCells(xlCellTypeConstants)
        If IsNumeric(r) Then r.Value = Val(r.Value)
    Next r
Next WS
End Sub

结果如下所示

enter image description here

有没有人可以轻松修复此问题而不删除任何数字?

3 个答案:

答案 0 :(得分:6)

转换存储为文字的数字的最简单方法是将其乘以1
所以试试这个If IsNumeric(r) Then r.Value = (r.Value)*1
或者你可以复制粘贴乘以1,这也适用! ;)

Sub ConvertTextNumberToNumber()
For Each WS In Sheets
    On Error Resume Next
    For Each r In WS.UsedRange.SpecialCells(xlCellTypeConstants)
        If IsNumeric(r) Then r.Value = (r.Value)*1
        ''Or test the values in the next column on the right
        'If IsNumeric(r) Then r.Offset(0,1).Value = (r.Value)*1
    Next r
Next WS
End Sub

答案 1 :(得分:1)

提供与OP声明相关的答案:

  

我尝试了不同的公式,但Excel没有认识到   格式。

无需使用VBA进行该操作。

如果您的小数字符是句点[。]

,请使用此公式
=SUM( SUBSTITUTE( SUBSTITUTE( B2, " ", "" ), ",", "." ) )

如果您的小数字符是冒号[,]

,则为此
=SUM( SUBSTITUTE( B2, " ", "" ) )

enter image description here

答案 2 :(得分:0)

如果您的数据始终使用"空格"作为千分隔符和"逗号"作为小数点,您可以使用以下内容(从原始脚本中修改)。

Sub ConvertTextNumberToNumber()
    For Each WS In Sheets
        On Error Resume Next
        For Each r In WS.UsedRange.SpecialCells(xlCellTypeConstants)

            'For testing purposes I like to see the cell which is selected
            r.Select
            'Setting the Cell Number Format
            'for more or less decimals just add/remove 0 after the . 
            r.NumberFormat = "0.00"
            'Assigning the Cell value to a String
            String1 = r.Value
            'Replacing the spaces with no space
            String1 = Replace(String1, " ", "")
            'Replacing the comma with a point
            String1 = Replace(String1, ",", ".")
            'Putting the new value into the cell
            r.Value = String1
        Next r
    Next WS
End Sub