Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12992 / 13646 ツリー ←次へ | 前へ→

【7576】セル内の文字の位置 どらちゃん 03/9/8(月) 20:58 質問
【7580】Re:セル内の文字の位置 ichinose 03/9/8(月) 22:46 回答
【7591】Re:バッチリです どらちゃん 03/9/9(火) 10:31 お礼

【7576】セル内の文字の位置
質問  どらちゃん  - 03/9/8(月) 20:58 -

引用なし
パスワード
   何度かお世話になっています。

以下のように、小数点以下桁数の一番長いものに桁を合わせて表示させる、というロジックを書いています。

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

【7580】Re:セル内の文字の位置
回答  ichinose  - 03/9/8(月) 22:46 -

引用なし
パスワード
   ▼どらちゃん さん:
こんばんは。

>何度かお世話になっています。
>
>以下のように、小数点以下桁数の一番長いものに桁を合わせて表示させる、というロジックを書いています。
>
>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

試してみて下さい。

【7591】Re:バッチリです
お礼  どらちゃん  - 03/9/9(火) 10:31 -

引用なし
パスワード
   ▼ichinose さん:

できました!
本当にありがとうございました。
今後もなにかありましたらよろしくお願いしますm(_ _)m

>'================================
>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
>
>試してみて下さい。

12992 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free