Excel VBA – 一个字段的数值

我的报价生成器创build一个Excel文档,我想运行一个macros只是保持它的计算。 出于某种原因,它说'数字存储为文本'时有数字。 我怎样才能改变他们的数字格式使用macros? 我发现如果我在配方栏中单击一次,问题也解决了。

下面的代码是我现在拥有的,但它不会解决错误。

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

列A包含一个数量(1,2,3等)。 我有另一列有同样的问题,但是这包含一个欧元货币,并有2个小数位。

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

在这里输入图像说明

谢谢你的帮助! 🙂

对Siddharth帮助我完成这个完整问题的额外欢呼。

汤姆,

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

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

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

在这里输入图像说明

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 

跟进

附加之前和之后的快照

在这里输入图像说明

更多后续(重要)

如果你有不同的地区设置,那么你将不得不妥善照顾他们。

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

在这里输入图像说明

尝试这种不同的方式:

方法1

 Selection.NumberFormat = "General" 

方式2

 vStr = "1000.5" intNum = CInt(vStr) 

方式3

使用VBA将文本转换为数字如果您经常将文本转换为数字,则可以使用macros。 将一个button添加到现有的工具栏,并将该macros附加到该button。 然后,select单元格,然后单击工具栏button。

 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