Excel VBA質問箱 IV

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

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


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

【45177】小数点以下の桁数 NumberFormatLocal? ℃素人 06/12/14(木) 13:41 質問[未読]
【45180】Re:小数点以下の桁数 NumberFormatLocal? Kein 06/12/14(木) 16:31 回答[未読]
【45197】Re:小数点以下の桁数 NumberFormatLocal? ℃素人 06/12/15(金) 10:09 質問[未読]
【45200】Re:小数点以下の桁数 NumberFormatLocal? ℃素人 06/12/15(金) 10:30 質問[未読]
【45243】Re:小数点以下の桁数 NumberFormatLocal? Kein 06/12/16(土) 15:39 発言[未読]
【45283】Re:小数点以下の桁数 NumberFormatLocal? ℃素人 06/12/18(月) 9:46 お礼[未読]

【45177】小数点以下の桁数 NumberFormatLocal?
質問  ℃素人  - 06/12/14(木) 13:41 -

引用なし
パスワード
    こんにちわ。
いつもここでお世話になっています。

今回は、小数点以下の桁数について教えてください。
シートのI列に基準となる小数点以下桁数の数字が入っています。
そこで、マクロを実行するとO,P,Q,R,S,T,U,V,W,X列もI列の小数点以下の桁数に揃うようにしたいのですが・・・
どうやって取得してどうやって取得した値を適用するのかさっぱりわかりません。
マクロの記録でやっても、
selection.NumberFormatLocal = "0.00_"
などと出ます。これをどのように使っていいのかわかりません。
これは私が手動で小数点以下の桁数を変えたので、取得してるとはいえませんよね?


わかりにくいので図で説明すると

図1
  ABC・・・I・・・ O    P   Q    R ・・・
1     0.002   0.2  0.008  9   0.002
・     0.5    0.0001 0.006  0.5  1.000
・     ・    ・   ・  ・   ・
・     ・    ・   ・  ・   ・  
10     ・    ・   ・  ・   ・



20

マクロを実行すると
図2
  ABC・・・I・・・ O    P   Q    R ・・・
1     0.002   0.200 0.008  9.000  0.002
・     0.5    0.0   0.0  0.5   1.0
・     ・    ・   ・  ・   ・
・     ・    ・   ・  ・   ・  
10     ・    ・   ・  ・   ・



20

となるようにしたいのです。
I列には必ず数値が入っています。O,P,Q,R,S,T,U,V,W,X列には数値が入っていたり入っていなかったりします。
ですので、範囲はI列にデータがある行のO,P,Q,R,S,T,U,V,W,X列です。

どなたかご教授のほど、よろしくお願いいたします。


【45180】Re:小数点以下の桁数 NumberFormatLocal?
回答  Kein  - 06/12/14(木) 16:31 -

引用なし
パスワード
   こんな感じでしょーか ?

Sub MyFormat()
  Dim C As Range
  Dim Pt As Integer, Nm As Integer
 
  On Error GoTo ELine
  For Each C In Range("I:I").SpecialCells(2, 1)
   Pt = InStr(1, C.Value, ".")
   If Pt > 1 Then
     Nm = Len(C.Value) - Pt
     C.Offset(, 6).Resize(, 10) _
     .NumberFormat = "0." & String(Nm, "0")
   End If
  Next
  Exit Sub
ELine:
  MsgBox "I列に数値を入力したセルがありません", 48
End Sub

注) I列の数値が、数式の計算結果として表示されている場合は
>For Each C In Range("I:I").SpecialCells(2, 1)


For Each C In Range("I:I").SpecialCells(3, 1)

と、変更して下さい。

【45197】Re:小数点以下の桁数 NumberFormatLocal?
質問  ℃素人  - 06/12/15(金) 10:09 -

引用なし
パスワード
   ▼Kein さん:
>こんな感じでしょーか ?

最高です!!
本当にありがとうございます。

今度は、I列のデータの小数点桁数に1を足した数が適用するようにしたいのですが・・・
I列が 0.01だったら 適用先のO,P,Q,R,S,T,U,V,W,X は 0.010となるようにするには
.NumberFormat = "0." & String(Nm + 1, "0")
でいいのでしょうか?
ためしにやってみましが、うまく動いていると思います。
何か問題があれば教えてください。

それと、もう一つ教えていただきたいのは適用先のO,P,Q,R,S,T,U,V,W,Xの小数点以下桁数の上限を4桁までにしたいのですが・・・

I列に0.0001とあって、適用先は桁数に1を足すので何もしなければ、0.00010となってしまいますが、上限を設けて、0.0001としたいのです。

わがままばかりで申し訳ございませんが、なにとぞご教授のほどよろしくお願いいたします。

【45200】Re:小数点以下の桁数 NumberFormatLocal?
質問  ℃素人  - 06/12/15(金) 10:30 -

引用なし
パスワード
   >▼Kein さん:
自分で作ってみたのですが・・・初心者なので自信がありません。
実際にいろいろなシチュエーションでテストしましたが・・・うまく動いている気がします。
適用先は書面のレイアウトが変わったのでI列の2つとなりにしましした。

以下のコードを追加しました。

      If C.Offset(, 2).Resize(, 10).NumberFormat > "0." & String(4, "0") Then
        C.Offset(, 2).Resize(, 10).NumberFormat = "0." & String(4, "0")
      End If
これでいいのでしょうか?

よろしくお願いします。

コード全文↓
Sub 小数点桁数整理()
  Dim C As Range
  Dim Pt As Integer, Nm As Integer
 
 'エラーならElineへ
  On Error GoTo ELine
 
  'I列にあるデータの小数点の位置を見つける
  For Each C In Range("I:I").SpecialCells(3, 1)
   Pt = InStr(1, C.Value, ".")
   If Pt > 0 Then
     Nm = Len(C.Value) - Pt
     '元の場所から右へ2つ行ったセルから10個までのセルに適用する
     C.Offset(, 2).Resize(, 10) _
     .NumberFormat = "0." & String(Nm + 1, "0")
      If C.Offset(, 2).Resize(, 10).NumberFormat > "0." & String(4, "0") Then
        C.Offset(, 2).Resize(, 10).NumberFormat = "0." & String(4, "0")
      End If
   End If
  Next
  Exit Sub
ELine:
  MsgBox "I列に数値を入力したセルがありません", 48
End Sub

【45243】Re:小数点以下の桁数 NumberFormatLocal?
発言  Kein  - 06/12/16(土) 15:39 -

引用なし
パスワード
   Sub 小数点桁数整理()
  Dim C As Range
  Dim Pt As Integer, Nm As Integer
 
  On Error GoTo ELine
  For Each C In Range("I:I").SpecialCells(3, 1)
   Pt = InStr(1, C.Value, ".")
   If Pt > 0 Then
     Nm = Len(C.Value) - Pt + 1
     If Nm > 4 Then Nm = 4
     C.Offset(, 2).Resize(, 10) _
    .NumberFormat = "0." & String(Nm, "0")
   End If
  Next
  Exit Sub
ELine:
  MsgBox "I列に数値を入力したセルがありません", 48
End Sub

とすれば、コードを整理できますね。

【45283】Re:小数点以下の桁数 NumberFormatLocal?
お礼  ℃素人  - 06/12/18(月) 9:46 -

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

本当にありがとうございます!
私の力業よりKeinさんにいただいたコードの方がシンプルですばらしいですね!
こちらを使わせていただきます。
今回は本当にありがとうございました!


>Sub 小数点桁数整理()
>  Dim C As Range
>  Dim Pt As Integer, Nm As Integer
> 
>  On Error GoTo ELine
>  For Each C In Range("I:I").SpecialCells(3, 1)
>   Pt = InStr(1, C.Value, ".")
>   If Pt > 0 Then
>     Nm = Len(C.Value) - Pt + 1
>     If Nm > 4 Then Nm = 4
>     C.Offset(, 2).Resize(, 10) _
>    .NumberFormat = "0." & String(Nm, "0")
>   End If
>  Next
>  Exit Sub
>ELine:
>  MsgBox "I列に数値を入力したセルがありません", 48
>End Sub
>
>とすれば、コードを整理できますね。

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