将文本格式转换为数字格式

时间:2016-09-30 09:55:19

标签: excel vba excel-vba

我有一张包含数字列表的Excel表格。低于10的任何内容都显示为00格式,但它有一个绿色小箭头表示错误,我必须单击并选择“转换为数字”,如下所示:

Tooltip Convert To Number

如何在不手动操作的情况下将这些转换为数字?如果我尝试录制宏,它就不会录制任何内容。

3 个答案:

答案 0 :(得分:5)

几种可能性。如果它们确实是数字:有时这就足够了:

range("A1:A1000").numberformat="0.00"

range("A1:A1000").value=range("A1:A1000").value 'yes it looks soooo dumb

否则,将其放在向量中并在每个上使用cdbl()。您可能需要使用"替换"用正确的小数分隔符替换错误的小数分隔符

答案 1 :(得分:2)

看起来@Skip Intro sollition并不总是适用于Excel 2010及更高版本,因为我在没有错误的情况下在多台计算机上没有结果。

所以我制作了一个新脚本,对我来说很好用:

Sub convert_text_to_numbers()

Dim varCounter As Integer
Dim varCellInRange, tableRange, startingCell, endingCell As Range

Set startingCell = Cells(1, 1)
Set endingCell = Cells.Cells(Cells.SpecialCells(xlLastCell).Row, Cells.SpecialCells(xlLastCell).Column)
Set tableRange = Range(startingCell, endingCell)

varCounter = 0
For Each varCellInRange In tableRange
    If IsNumeric(varCellInRange) Then
        varCellInRange.Value = Val(varCellInRange)
        varCounter = varCounter + 1
    End If
Next

MsgBox ("Converted " & varCounter & " instances")

End Sub

旧答案:

我为此做了一点作弊,不能说它很完美,但你可以亲自尝试一下:

 Sub fixNumberFormats()

     Columns("A:A").TextToColumns

 End Sub

如果需要,您可以通过稍微修改代码来代替列(“A:A”),而不是列(“A:A”)。

答案 2 :(得分:2)

这将找到最后一行数据,然后转换任何文字'数字'在有效列中。

Sub Convert_Text_Num()

Dim lngCounter As Long
Dim rCell As Range
Dim strRange As String
Dim lngCol As Long

lngCounter = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row 'Find last row of data
lngCol = ActiveCell.Column

vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)

strRange = Col_Letter & "1:" & Col_Letter & lngCounter


        For Each rCell In Range(strRange).Cells

            rCell.NumberFormat = "General"
            rCell.Value = rCell.Value

        Next rCell

MsgBox "All Done!", vbOKOnly + vbInformation, Now()

End Sub