每个范围的VBA编号格式不同
问题描述:
我想根据第二个单元格的小数位数来更改我的范围的格式。任何想法? 我使用下面的函数来计算小数(作品)每个范围的VBA编号格式不同
Function CountDecimalPlaces(aNumber As Double) As Long
Dim len1 As Long, len2 As Long
len1 = Len(CStr(aNumber))
len2 = Len(CStr(Int(aNumber)))
CountDecimalPlaces = len1 - len2 + CLng(len1 <> len2)
End Function
,并想用这个来格式化我的范围有不同数量的小数
For b = 1 To lastCol
Range(cells(3,b),cells(50,b)).NumberFormat = "0." & CountDecimalPlaces (Cells(2, b)) x 0
Next b
我当然知道“CountDecimalPlaces(细胞(2,b))×0" 没有按牛逼的工作,但我希望这使它可以理解的,你帮
答
这种替换代码:
Range(cells(3,b),cells(50,b)).NumberFormat = "0." & String(CountDecimalPlaces(Cells(2, b)), "0")
的String
需要两个强制性参数:
Number
:一个字符必须重复Character
的次数:具有字符必须重复
这里有另一种方法可以计算一个数字中的小数位数:
Function CountDecimalPlaces(aNumber As Double) As Long CountDecimalPlaces = Len(Split(CStr(aNumber), ".")(1)) End Function
编辑(基于Excelosaurus的建议):
Function CountDecimalPlaces(aNumber As Double) As Long
If Int(aNumber) = aNumber Then
CountDecimalPlaces = 0
Else
CountDecimalPlaces = Len(Split(CStr(aNumber), Application.International(xlDecimalSeparator))(1))
End If
End Function
答
您可以修改您的十进制计数如下为好。
Function CountDecimalPlaces(aNumber As Double) As String
Dim len1 As Long, len2, lenX As Long
Dim i As Integer
Dim answer As String
answer = "0."
len1 = Len(CStr(aNumber))
len2 = Len(CStr(Int(aNumber)))
lenX = len1 - len2 + CLng(len1 <> len2)
If lenX > 0 Then
For i = 1 To lenX
answer = answer & "0"
Next i
End If
CountDecimalPlaces = answer
End Function
,并在主函数中使用这样的:
Range(cells(3,b),cells(50,b)).NumberFormat = CountDecimalPlaces (Cells(2, b))
所提出的功能将失败整数和使用上比任何一个时期作为小数点分隔其他系统。使用Application.International(xlDecimalSeparator)。 – Excelosaurus
@Excelosaurus,谢谢你指出。我修改了我发布的功能。 – Mahesh
由于强制格式,它现在返回0或1。不要以为你会把它塞进一个干净的单行内容中:-)我会用If Round(aNumber,0)= aNumber Then CountDecimalPlaces = 0 Else CountDecimalPlaces = Len(Split(CStr(aNumber)),Application。国际(xlDecimalSeparator),比较:= vbBinaryCompare)(1)))结束如果。 – Excelosaurus