Excel VBA - 字段对Number的值

时间:2012-02-22 09:20:38

标签: excel vba excel-vba

我的报价生成器创建了一个Excel文档,我想在其上运行一个宏来保持它的计算。出于某种原因,当有数字时,它会将“数字存储为文本”。如何使用宏将它们更改为数字格式?我发现如果在公式栏中单击一次,问题也解决了。

下面的代码就是我现在所拥有的,但它无法解决错误。

Range("A1:A" & LastRow).Select
Selection.NumberFormat = "0"

A列包含金额(1,2,3等)。我有另一个列有相同问题的列,但它包含一个€欧元的货币,并有2位小数。

Range("I1:I" & LastRow).Select
Selection.NumberFormat = "0.00"

enter image description here

感谢您的帮助! :)

对Siddharth的额外呐喊,他帮助我完成了这个完整的问题。

2 个答案:

答案 0 :(得分:2)

尝试以下不同方式: -

方式1

Selection.NumberFormat = "General" 

方式2

vStr = "1000.5"

intNum = CInt(vStr)

方式3

使用VBA将文本转换为数字 如果经常将文本转换为数字,则可以使用宏。 将按钮添加到现有工具栏,并将宏附加到该按钮。然后,选择单元格,然后单击工具栏按钮。

Sub ConvertToNumbers() 
  Cells.SpecialCells(xlCellTypeLastCell) _
    .Offset(1, 1).Copy
  Selection.PasteSpecial Paste:=xlPasteValues, _
     Operation:=xlPasteSpecialOperationAdd
  With Selection
     .VerticalAlignment = xlTop
     .WrapText = False
  End With
  Selection.EntireColumn.AutoFit
End Sub 

答案 1 :(得分:2)

汤姆,

有三种方法可以解决这个问题

1 )返回到您的报价生成器,看看它是如何将数据保存到Excel工作表并修改其中的代码

2 手动:突出显示范围并点击绿色三角旁边的感叹号,然后点击“转换为数字”查看快照

enter image description here

3 )使用此代码。

Sub Sample()
Dim LastRow As Long, i As Long

LastRow = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row

Sheets("Sheet1").Range("A1:A" & LastRow).NumberFormat = "0"

For i = 1 To LastRow
    If Val(Sheets("Sheet1").Range("A" & i).Value) <> 0 Then _
    Sheets("Sheet1").Range("A" & i).Formula = _
    Val(Sheets("Sheet1").Range("A" & i).Value)
Next i

Dim temp As Double

LastRow = Sheets("Sheet1").Range("I" & Rows.Count).End(xlUp).Row

Sheets("Sheet1").Range("I1:I" & LastRow).NumberFormat = "\$#,##0.00"

For i = 1 To LastRow
    If Val(Sheets("Sheet1").Range("I" & i).Value) <> 0 Then
    temp = Sheets("Sheet1").Range("I" & i).Value
    Sheets("Sheet1").Range("I" & i).ClearContents
    Sheets("Sheet1").Range("I" & i).Value = temp
    End If
Next i
End Sub

关注

附加快照之前和之后

enter image description here

更多关注(重要)

如果您有不同的区域设置,则必须妥善处理它们。

例如荷兰比利时,您必须使用“,”作为小数。请看快照。

enter image description here