使用.NumberFormat在Excel VBA中格式化小数位数
我将数据从Excel电子表格插入到Word文档中。 有一个值有两个以上的小数位。 我正在使用下面的代码来尝试将其转换为2位小数,并将其粘贴到我的文档。
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位小数,但公式栏显示更多。
并且?Selection.Value
。VBA控制台的即时窗口中的值也显示为89.43448051。 这被粘贴到我的文档。
为什么.NumberFormat
函数将其更改为2位小数? 我需要改变什么?
.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
数字格式只会改变您看到的格式。 无论如何,底层的价值是VARIANT。 尝试使用ROUND()函数以确保只导入2位小数
为什么.NumberFormat函数将其更改为2位小数? 我需要改变什么?
一般来说,你真的不想改变原始基础价值的精确度。 当你这样做的时候,“一分钱一分货”的情况经常会起作用。 特别是在计算和累计税收百分比,利率,批发零售价格等时。
有了这个说法,您可以快速更改底层值的精确度到整个工作簿的显示内容,如下所示。
ActiveWorkbook.PrecisionAsDisplayed = True
.PrecisionAsDisplayed属性是Workbook对象的成员。 因此,可以使用ActiveWorkbook属性 , ThisWorkbook属性或Workbooks集合中的命名工作簿来访问它。
警告! 此操作不能撤消。 一旦你截断小数精度到显示的值,你不能得到它回来。
此选项在“Excel选项”,“高级”中也可用。计算此工作簿时,请将“精度”设置为显示。 预计会有类似的警告。