将存储为文本的数字转换为数字

时间:2009-12-10 14:12:01

标签: excel-vba vba excel

从其他工作表复制货币数据时,此代码似乎无法正常工作:

Dim myprice As String
myprice =   othersheet.Range("H" & c.Row).Value
ws.Range("C" & r).Value = myprice
ws.Range("C" & r).Style = "Currency"

有时单元格会发出“此数字格式为文本”的警告

5 个答案:

答案 0 :(得分:2)

Excel的“存储为文本的数字”问题可能有点令人烦恼。

帮助建议是通过将值乘以1来执行转换操作。但是,实际上,您可能最好检查myprice是否为数字,然后相应地进行。

例如:

Dim myprice As String
myprice =   othersheet.Range("H" & c.Row).Value
If IsNumeric(myprice) Then
    myprice = CCur(myprice)
Else
    'Catch non-numeric accordingly
    myprice = "Couldn't convert to number"
End If
ws.Range("C" & r).Value = myprice
ws.Range("C" & r).Style = "Currency"

HTH

答案 1 :(得分:1)

尝试将myprice声明为Currency

答案 2 :(得分:0)

您是否尝试过使用单元格的NumberFormat

ws.Range("C" & r).NumberFormat = "$#,##0.00"

答案 3 :(得分:0)

这对我有用:

For Each myprice In __your target range here__
  myprice.Value = CDec(myprice.Value)
  myprice.NumberFormat = "0.00"  'or whatever format you wish
Next myprice

答案 4 :(得分:0)

此代码对我有用,可根据内容转换单元格。对于包含> 800,000个单元格的工作表来说,它运行得相当快,其中包含以文本形式存储的数字,在Windows 8.1计算机上运行32位Excel 2013。它在不到2分钟的时间内完成了这项工作。

For Each aCell In ThisWorkbook.Sheets("Working data").UsedRange.Cells
    If aCell.Errors.Item(xlNumberAsText).Value Then
        aCell.Formula = aCell.Text
    End If
Next aCell