在 Excel VBA 中使用 .NumberFormat 格式化小数位
Posted
技术标签:
【中文标题】在 Excel VBA 中使用 .NumberFormat 格式化小数位【英文标题】:Use of .NumberFormat to Format Decimal Places in Excel VBA 【发布时间】:2016-04-27 01:04:21 【问题描述】:我正在将数据从 Excel 电子表格插入 Word 文档。有一个超过 2 位小数的值。我正在使用以下代码尝试将其转换为小数点后 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 位小数,但公式栏显示的更多。
VBA 控制台的即时窗口中的?Selection.Value
也显示 89.43448051。这被粘贴到我的文档中。
为什么.NumberFormat
函数可以将其更改为小数点后两位?我需要改变什么?
【问题讨论】:
NumberFormat 不会改变数字本身。它只影响数字的视觉显示方式。 (如果它确实修改了值,那就太糟糕了,尤其是在您处理复杂的会计或财务计算时。想象一下会导致的错误?) 看这里***.com/questions/20648149/… 【参考方案1】:.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
【讨论】:
【参考方案2】:数字格式只会更改您看到的格式。 无论如何,基础价值是 VARIANT。 尝试使用 ROUND() 函数以确保只导入 2 位小数
【讨论】:
【参考方案3】:为什么 .NumberFormat 函数可以将其更改为 2 位小数?我需要改变什么?
一般来说,您确实不想更改原始基础值的精度。当您这样做时,“丢失一分钱”的情况通常会发挥作用。在计算和汇总税收、利率、批发到零售加价等的百分比时尤其如此。
话虽如此,您可以使用以下命令快速将基础值的精度更改为整个工作簿的显示值。
ActiveWorkbook.PrecisionAsDisplayed = True
.PrecisionAsDisplayed property 是Workbook Object 的成员。因此,可以使用ActiveWorkbook property、ThisWorkbook Property 或Workbooks Collection 中的命名工作簿来访问它。
警告!此操作无法撤消。一旦将小数精度截断为显示的值,就无法取回。
此选项在 Excel 选项中也可用,高级,计算此工作簿时,设置显示的精度。期待类似的警告。
【讨论】:
既然我们在加拿大摆脱了一分钱,这是否意味着我们不必担心“丢失一分钱”的情况 8) 实际上,由于 2 和 7 向下取整,3 和 8 向上取整,更像是“丢了个镍”。我们从来没有丢掉我们价格中的“美分”;只是能够准确支付上述价格。以上是关于在 Excel VBA 中使用 .NumberFormat 格式化小数位的主要内容,如果未能解决你的问题,请参考以下文章