- ベストアンサー
Excelのマクロについて教えてください。
私がやりたいマクロは、 ある範囲の中でセルの中の数値が「0」以上のときは四捨五入をしなさい。 というマクロを組みたいのですが分かるかたがいましたら教えてください。 Excel2000です。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 範囲を選択しておいて、以下のマクロを実行して下さい。 Sub macro() Dim rg As Range For Each rg In Selection If WorksheetFunction.IsNumber(rg.Value) Then If rg.Value >= 0 Then rg.Value = WorksheetFunction.Round(rg.Value, 0) End If End If Next rg End Sub 四捨五入する桁は、Round関数の第2引数で対応して下さい。 (このRound関数は、ワークシート関数と同じです。)
その他の回答 (3)
#2です。ごめんなさい、「0以上のときは」という条件が抜け落ちてました。以下は修正バージョンです。 4行目の「k = 0」は、小数点以下何桁を有効にするかです。 元の数が「0.567」のとき 「k = 0」では「1」に 「k = 1」では「0.6」に 「k = 2」では「0.57」になります。 '--------------------------------------- Sub 四捨五入() Dim c As Variant Dim k As Integer k = 0 For Each c In Selection If (IsNumeric(c) * (c > 0)) Then c.Value = Int((c * 10 ^ k) + 0.5) / 10 ^ k End If Next End Sub '--------------------------------------- #2の方、アドバイスありがとうございました。 これなら問題ないですよね?
- maruru01
- ベストアンサー率51% (1179/2272)
No.1です。 No.2の方へ。 IsNumeric関数は、未入力のセルの場合Trueを返します。 したがって、この場合、未入力のセルは「0」で埋められてしまいますよ。 もちろん、未入力のセルが存在しないなら構いませんが。
Sub 四捨五入() Dim c As Variant For Each c In Selection If IsNumeric(c) Then c.Value = Int(c + 0.5) End If Next End Sub '--------------------------------- いかがでしょうか? 値がマイナスのとき、-1.5を-1ではなく-2にしたい場合は、「c.Value = Int(c + 0.5) 」の部分の「Int」を「Fix」に変えてください。