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

我有一个包含数字列表的Excel工作表。 任何低于10的显示为00格式,但它有小绿箭头表示错误,我必须点击并select“转换为数字”,如下所示:

工具提示转换为数字

如何将这些数字转换为数字,而无需手动执行? 如果我尝试录制一个macros,它不logging任何东西。

这将find最后一行数据,然后转换活动列中的任何文本“数字”。

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 

几种可能性。 如果他们真的是数字:有时这就够了:

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

否则,把它放在一个向量中,并使用cdbl()。 您可能需要使用“replace”来replace错误的小数点分隔符

看起来像@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”),您可以通过修改代码来处理特定的单元格。