• ベストアンサー

Excelのマクロについて教えてください。

私がやりたいマクロは、 ある範囲の中でセルの中の数値が「0」以上のときは四捨五入をしなさい。 というマクロを組みたいのですが分かるかたがいましたら教えてください。 Excel2000です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。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)

noname#148473
noname#148473
回答No.4

#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.3

No.1です。 No.2の方へ。 IsNumeric関数は、未入力のセルの場合Trueを返します。 したがって、この場合、未入力のセルは「0」で埋められてしまいますよ。 もちろん、未入力のセルが存在しないなら構いませんが。

noname#148473
noname#148473
回答No.2

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」に変えてください。

関連するQ&A