我的报价生成器创建了一个Excel文档,我想在其上运行一个宏来保持它的计算。出于某种原因,当有数字时,它会将“数字存储为文本”。如何使用宏将它们更改为数字格式?我发现如果在公式栏中单击一次,问题也解决了。
下面的代码就是我现在所拥有的,但它无法解决错误。
Range("A1:A" & LastRow).Select
Selection.NumberFormat = "0"
A列包含金额(1,2,3等)。我有另一个列有相同问题的列,但它包含一个€欧元的货币,并有2位小数。
Range("I1:I" & LastRow).Select
Selection.NumberFormat = "0.00"
感谢您的帮助! :)
对Siddharth的额外呐喊,他帮助我完成了这个完整的问题。
答案 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 )手动:突出显示范围并点击绿色三角旁边的感叹号,然后点击“转换为数字”查看快照
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
关注
附加快照之前和之后
更多关注(重要)
如果您有不同的区域设置,则必须妥善处理它们。
例如荷兰比利时,您必须使用“,”作为小数。请看快照。