如何使用VBA以编程方式显示Excel单元格中的所有十进制数字

我有一个Excelmacros,它存储了一些商业价值。

对于其中一个单元格的值应显示999.999999,但它显示1000和在公式栏中,我看到的值显示为999.999999。 由于这些值是从一种types转换为另一种types的,所以客户希望我显示值,因为没有小数点后四舍五入。

我认为的一种解决方法是在填充值之前将单元格转换为文本格式,但这不起作用,因为我需要在各种区域设置中支持此操作。

任何关于如何让Excel VBA知道小数点后显示的数字位数的build议将是一个很大的帮助。

当前代码来填充单元格值:

Range.Offset(0,0).Value = Response

在这里,Response是string格式的转换值,即999.999999。

由于Excel的精度限制为最多15位十进制数字,因此您可以仅将自定义格式的单元格设置为

#.############### 

(小数点后15位)

你可以在没有VBA的情况下做到这一点,但是VBA代码可能如下所示:

 Option Explicit Sub ShowAllDecimals() Dim WS As Worksheet Dim R As Range, C As Range Set WS = Worksheets("sheet1") With WS Set R = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With For Each C In R If IsNumeric(C) Then _ C.NumberFormat = "#.################" Next C End Sub 

一种方法是检查小数点位数,如:

 Dim str As String str = Response If Len(str) - InStr(str, ".") > 2 Then Range.Offset(0, 0).Value = "'" & str Else Range.Offset(0, 0).Value = str End If 

或者干脆总是使用Range.Offset(0, 0).Value = "'" & Response查看整个数字;)


另一种方式是改变数字格式,如:

 Dim str As String, x As Byte str = Response x = Len(str) - InStr(str, ".") Range.Offset(0, 0).Value = str If x < 2 Then x = 2 Range.Offset(0, 0).NumberFormat = "0." & Application.Rept("0", x) 

编辑:对于本地化你可以使用Application.DecimalSeparator得到正确的一个:

 Range.Offset(0, 0).NumberFormat = "0" & Application.DecimalSeparator & Application.Rept("0", x) 

也可以稍后做一个更改

 If Len(Range.Offset(0, 0).Text) - Len(Range.Offset(0, 0).Value) Then Range.Offset(0, 0).NumberFormat = "0" & Application.DecimalSeparator & Application.Rept("0", x) End If 

编辑2:
对于自动细胞发酵,您可以使用Ron的方法,直接设置细胞数量格式

 0.0############### 

只有使用#会导致3显示为.3显示为.3 。 另外,如果更改为使用位置,分隔符应自动更改数字格式。

这个链接应该有帮助。 请享用:
http://www.excelhowto.com/macros/formatting-a-range-of-cells-in-excel-vba/您也可以通过公式执行ROUND ,CEILING或FLOOR操作…圆形可以在您的VBA和你指定的精度。 如果您的单元格已被预先分配为0位小数,那么999.99999将变成1000.使用数字格式“0.0000000”或类似的东西可以工作。