使用.NumberFormat格式化Excel VBA中的小数位数

时间:2016-04-27 01:04:22

标签: excel vba excel-vba

我正在从Excel电子表格中将数据插入Word文档。有一个值超过2位小数。我使用以下代码尝试将其转换为2位小数并将其粘贴到我的doc。

 wdApp.Selection.GoTo what:=-1, Name:="Device_Avail"
''Referring to the total count column in the Device Availability worksheet.
Set devAvailRow = shDevAvail.Range("A:A").Find("Overall Totals:",       
After:=Cells(1, 1), searchdirection:=xlPrevious)

''Actual piece to format value to 2 decimal places.
shDevAvail.Cells(devAvailRow.Row, 3).NumberFormat = "0.00"
devAvailPer = shDevAvail.Cells(devAvailRow.Row, 3)
wdApp.Selection.TypeText devAvailPer

现在,该值仅显示2位小数,但公式栏显示的内容更多。

enter image description here

VBA控制台的立即窗口中的?Selection.Value也显示为89.43448051。这会粘贴到我的文档中。

为什么.NumberFormat函数可以将其更改为2位小数?我需要改变什么?

3 个答案:

答案 0 :(得分:7)

.NumberFormat属性格式化渲染文本,并且不会更改单元格中存储的值。您可以使用' Range.Text'获取显示的值:

Range("A1") = 99.12345
Range("A1").NumberFormat = "0.00"
Debug.Print Range("A1").Text   '  > 99.12
Debug.Print Range("A1").Value  '  > 99.12345

答案 1 :(得分:2)

数字格式只会更改您看到的格式。 无论如何,基础价值是VARIANT。 尝试使用ROUND()函数以确保只导入2个小数位

答案 2 :(得分:1)

  

为什么.NumberFormat函数可以将其更改为2位小数?我需要改变什么?

一般来说,你真的不想改变原始基础价值的精确度。当你这样做时,“失去一分钱”的场景经常发挥作用;特别是在计算和计算税率,利率,批发零售价格等的百分比时

如上所述,您可以使用以下内容快速将基础值的精度更改为整个工作簿的显示内容。

ActiveWorkbook.PrecisionAsDisplayed = True

.PrecisionAsDisplayed propertyWorkbook Object的成员。因此,可以使用ActiveWorkbook propertyThisWorkbook PropertyWorkbooks Collection中的命名工作簿来访问它。

  

警告!此操作无法撤消。一旦将小数精度截断为显示值,就无法将其恢复。

此选项在Excel选项中也可用,高级,在计算此工作簿时,显示设置精度。期待类似的警告。