VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。効率化と暇つぶしを兼ねています。VBA以外の話題もあるよ(笑)

小数第n位以下を四捨五入する

小数点n位以下を四捨五入したいセルを選択して、マクロを実行します。

f:id:kouten0430:20170806154923j:plain

 

InputBoxに四捨五入したい小数点以下の桁数を指定します。例えば、小数第三位以下を四捨五入する場合は「3」を入力します。

f:id:kouten0430:20170806154945j:plain

 

これで小数第三位以下が四捨五入され、小数第二位までの数値に変換されます。ポイントは表示上だけではなく、実際に四捨五入された数値になることです。

f:id:kouten0430:20170806155006j:plain

 

 

「小数点以下の表示桁数を減らす」ボタンや「書式設定-表示形式-小数点以下の桁数指定」で行った場合は、表示のみの変化であるため内部的には小数点以下がすべてそのまま残ります。SUM関数などで合計した際に、見えない部分の小数の桁上がりによって、表示上の合計と異なってしまわないようにROUND関数やINT関数などで数値を整えましょう。
(印刷されたものが正式な書類として出回ってしまうと、「実はEXCEL上では小数n位以下が隠れていて・・・・・・」というような言い訳は通用しません(。´Д⊂))

 

ROUND関数を使った簡単なプログラムです。

***************************************

Sub 小数第n位以下を四捨五入()
    Dim n As Variant
    Dim myRange As Range
    n = Application.InputBox(Prompt:="小数第何位以下を四捨五入しますか?", Type:=1)
        If TypeName(n) = "Boolean" Then
            Exit Sub
        End If
    For Each myRange In Selection
        If myRange.Value <> 0 And myRange.Value <> "" And _
        TypeName(myRange.Value) <> "String" And TypeName(myRange.Value) <> "Date" Then
        'セルの値が0,空白,文字列,日付のいづれかの場合は処理をしない
            myRange.Value = Round(myRange.Value, n - 1)  '小数第n位以下は四捨五入
        End If
    Next myRange
   
End Sub

***************************************

 ※SubからEnd Subまでをコピペしてマクロを使用できます。使用の際は自己責任でお願いいたします。

 

使用する際の注意
マクロで行った処理は「元に戻す」ことができない為、マクロ実行前に保存することをお勧めします。