|
▼どらちゃん さん:
こんばんは。
>何度かお世話になっています。
>
>以下のように、小数点以下桁数の一番長いものに桁を合わせて表示させる、というロジックを書いています。
>
>1.332
>12.56975
>3.5
>上記の3つの値があったら、2番目に合わせて
>1.33200
>12.56975
>3.50000
>にしたいのです。
>
>そこでうまくいかないのが、「.」(=少数点)の位置を返したいのですが
>うまくいきません・・。Findを使っている前後でひっかかります。
>
>どんなことでもいいので、よろしくお願い致します。
>
>****************************
>Dim CPpl As Integer
>Dim CPvl As String
>Dim CPlen As Byte
>For Rr=2 to 31
> CP = RSht.Cells(Rr, 12)
> CPpl = CP.Find(".")
> CPvl = Mid(CStr(RSht.Cells(Rr, 12)), CPpl)
> If Len(CPvl) > CPlen Then CPlen = Len(CPvl)
>Loop
>Dim CTT As Byte
>CTT = 0
>Do Until CTT = CPlen
> KETA = KETA + "0"
> CTT = CTT + 1
>Loop
>CSht.Range("G7:G36").NumberFormat = "#,##0." & KETA & ";-#,##0." & KETA
'================================
Sub main()
Dim 桁数 As Long
Dim 書式 As String
桁数 = get_小数点以下の桁数(Range("G7:G36"))
書式 = "#,##0"
If 桁数 > 0 Then
書式 = 書式 & "." & String(桁数, "0")
End If
Range("G7:G36").NumberFormat = 書式
End Sub
'==========================================================
Function get_小数点以下の桁数(rng As Range) As Long
'get_小数点以下の桁数 は、正の値のとき、意味を持つ
With rng
get_小数点以下の桁数 = Application.Evaluate("=MAX(LEN(TEXT((ABS(" _
& .Address & "-TRUNC(" & .Address & "))),""@"")))") - 2
End With
End Function
試してみて下さい。
|
|