2016-09-30 63 views
0

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

Tooltip Convert To Number

如何转换到这些数字没有手动做?如果我尝试录制宏,它不会记录任何内容。

回答

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 
+0

这些都有效,但这是最适合我的。谢谢你们! – TCassa

+0

我也喜欢这个,但由于某种原因,它不适合我:) –

+0

@IvanTokarev你有什么错误? –

5

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

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

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

否则,把它放在一个载体,每个使用cdbl()。您可能需要使用“替换”来替换错误的小数分隔符

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”),如果需要通过修改代码一点就可以解决特定的细胞。

相关问题