VBA:将文本转换为数字

问题描述:

我有几列数字,无论出于何种原因,都被格式化为文本。这可以防止我使用诸如小计功能之类的算术函数。将这些“文本数字”转换为真实数字的最佳方式是什么?VBA:将文本转换为数字

下面是具体问题的截图: Error

我已经试过这些片段无济于事:

Columns(5).NumberFormat = "0" 

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
+2

突出显示所有的数字。点击警告框旁边的向下箭头。选择转换为数字。它将在不需要vba的情况下进行大规模部署。 –

+0

嗨斯科特 - 我同意这是一个很好的解决方案。但是,我现在可以听到最终用户抱怨说“一切都是零!”已经。由于VBA已经被用于运行脚本(我应该在这个问题中提到这一点),在我看来,最好只包括代码来避免这个对话。 – aLearningLady

+0

使用CInt(Cell()。Value)将单元格的值作为数字 – gizlmo

使用下面的函数(改变[E:E]为适合您需要的范围)来规避此问题:

[E:E].Select 
With Selection 
    .NumberFormat = "General" 
    .Value = .Value 
End With 

我之前有过这个问题,这是我的解决方案。

With Worksheets("Sheet1").Columns(5) 
    .NumberFormat = "0" 
    .Value = .Value 
End With 

这将Excel工作簿的所有文本转换为数字。

Sub ConvertTextToNumbers() 
Dim wBook As Workbook 
Dim LastRow As Long, LastCol As Long 
Dim Rangetemp As Range 

'Enter here the path of your workbook 
Set wBook = Workbooks.Open("yourWorkbook") 
LastRow = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
LastCol = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 

For c = 1 To LastCol 
Set Rangetemp = Cells(c).EntireColumn 
Rangetemp.TextToColumns DataType:=xlDelimited, _ 
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ 
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ 
    :=Array(1, 1), TrailingMinusNumbers:=True 
Next c 
End Sub 

这可以用于查找表单中的所有数值(甚至那些格式为文本)并将它们转换为单个(CSng函数)。

For Each r In Sheets("Sheet1").UsedRange.SpecialCells(xlCellTypeConstants) 
    If IsNumeric(r) Then 
     r.Value = CSng(r.Value) 
     r.NumberFormat = "0.00" 
    End If 
Next 

为我的作品是解决方案:

For Each xCell In Selection 

    xCell.Value = CDec(xCell.Value) 

Next xCell