VBA Round, RoundUp, RoundDown関数
In this Article
VBAで数値を丸める
VBAのRound 関数は、数値を指定された桁数に丸める関数です。
VBA Round 関数のシンタックス
VBA Round 関数のシンタックスは次のとおりです。
Round(数値, [桁数])
- 数値 – 丸める数値。
- 桁数(オプション) – 丸める小数点以下の桁数を指定する整数。この値は、0 以上でなければなりません (>=0)。空白の場合、既定値として 0 が使用され、最も近い整数に丸められます。
それでは、VBAのRound関数がどのように機能するのか、小数点以下1桁に丸める例を見てみましょう。
Sub Round1()
Msgbox Round(7.25, 1)
End Sub
その結果、以下のようなメッセージボックスが表示されます。
VBA 変数を丸める
上の例では、丸めたい数値を直接関数に入力しましたが、通常は代わりに変数を丸めることになります。以下は、変数を使った例です。
注:10進数の値を扱うため、Doubleデータ型を使用しています。
Sub RoundUsingVariable()
Dim unitcount As Double
unitcount = 7.25
MsgBox "The value is " & Round(unitcount, 1)
End Sub
結果は次のとおりです。
VBA 丸め込み結果
実際の数値 | 小数点以下の桁数 | 結果 |
---|---|---|
7.25 | 0 | 7 |
7.25 | 1 | 7.2 |
7.25 | 2 | 7.25 |
-7.25 | 1 | -7.2 |
-7.25 | 2 | -7.25 |
VBA セルの値を丸める
VBAでは、セルの値を直接丸めることもできます。
Sub RoundCell()
Range("A1").Value = Round(Range("A1").Value, 2)
End Sub
VBA RoundUp関数
VBAを使って、数値を切り上げたいとします。VBAにはRoundUpに相当する組み込み関数がありませんが、その代わりにVBAのコードからExcelのRoundUpワークシート関数を呼び出すことができます。
roundupUnitcount = Application.WorksheetFunction.RoundUp(unitcount, 3)
WorksheetFunctionオブジェクトを利用して、Excelのワークシート関数をVBAで使用することができます。呼び出すことができないワークシート関数は、すでにVBAに相当するものが組み込まれているものだけです。
Excelワークシートラウンドアップ関数の構文は次のとおりです。
ROUNDUP(数値, 桁数)
- 数値 – 切り上げたい数値
- 桁数 – 丸めたい数値の桁数
それでは、VBAコードの中でRoundUpワークシート関数にアクセスする方法を確認するために、例を見てみましょう。
Sub RoundUp()
Dim unitcount As Double
Dim roundupUnitcount As Double
unitcount = 7.075711
roundupUnitcount = Application.WorksheetFunction.RoundUp(unitcount,4)です。
MsgBox "The value is " & roundupUnitcount
End Sub
結果は次のとおりです。
最も近い整数への切り上げ
小数点以下の桁数に0を指定すると、小数点以下を切り上げることができます。
Sub RoundUpWhole()
MsgBox Application.WorksheetFunction.RoundUp(7.1, 0)
End Sub
結果は次のとおりです。
RoundUp関数の結果
実際の数値 | 桁数 | 結果 |
---|---|---|
7.075711 | 0 | 8 |
7.075711 | 1 | 7.1 |
7.075711 | 2 | 7.08 |
7.075711 | 3 | 7.076 |
7.075711 | -1 | 10 |
7.075711 | -2 | 100 |
7.075711 | -3 | 1000 |
VBA RoundDown関数
例えば、VBAを使って数値を切り捨てたいとします。VBAにはRoundDownに相当する組み込み関数がないので、やはりVBAのコードからExcelのRoundDownワークシート関数を呼び出すことになります。
ExcelワークシートのRoundDown関数の構文は次のとおりです。
ROUNDDOWN(数値, 桁数)
- 数値 – 切り捨てたい数値
- 桁数 – 丸めたい数値の桁数
それでは、VBAコードの中でRoundDownワークシート関数にアクセスする方法を確認してみましょう。
Sub RoundDown()
Dim unitcount As Double
Dim rounddownUnitcount As Double
unitcount = 5.225193
rounddownUnitcount = Application.WorksheetFunction.RoundDown(unitcount, 4)
MsgBox "The value is " & rounddownUnitcount
End Sub
結果は次のとおりです。
最も近い整数への切り捨て
小数点以下の桁数に0を指定することで、小数点以下を切り捨てることができます。
Sub RoundDownWhole()
MsgBox Application.WorksheetFunction.RoundDown(7.8, 0)
End Sub
結果は次のとおりです。
RoundDown関数の結果
実際の数値 | 桁数 | 結果 |
---|---|---|
5.225193 | 0 | 5 |
5.225193 | 1 | 5.2 |
5.225193 | 2 | 5.22 |
5.225193 | 3 | 5.225 |
5.225193 | -1 | 0 |
5.225193 | -2 | 0 |
5.225193 | -3 | 0 |
その他のVBA丸め関数
VBA Ceiling – 指定された基準値に切り上げる
VBAにはCeiling.Math関数に相当するものはありません。したがって、数値を最も近い整数または指定した有効数字の倍数に丸めたい場合は、VBAコードからExcelのCeiling.Mathワークシート関数を呼び出すことになります。
ExcelのCeiling.Mathワークシート関数の構文は次のとおりです。
CEILING.MATH(数値, [基準値], [モード])
- 数値 – 四捨五入したい数。
- 基準値 (オプション) – 四捨五入される数値の倍数。
- モード (オプション) – 負の数をゼロの方向に丸めるか、またはゼロから離れるように丸めるかを制御します。
それでは、VBAコードの中でCeiling.Mathワークシート関数にアクセスする方法を確認するために、例を見てみましょう。
Sub RoundUpToSignificance()
Dim unitcount As Double
Dim ceilingmathUnitcount As Double
unitcount = 4.1221
ceilingmathUnitcount = Application.WorksheetFunction.Ceiling.Math(unitcount, 5)
MsgBox "The value is " & ceilingmathUnitcount
End Sub
結果は次のとおりです。
基準値への切り上げ結果
実際の数値 | 基準値 | モード | 結果 |
---|---|---|---|
4.1221 | 5 | ||
4.1221 | 3 | 6 | |
4.1221 | 50 | 50 | |
-4.1221 | 3 | -3 | |
-4.1221 | 3 | -1 | -6 |
VBA Floor – 指定された基準値に切り捨てる
VBAには、Floor.Math関数に相当するものもありません。しかし、もう一度言いますが、数値を最も近い整数または最も近い指定された有効数字の倍数に切り捨てたい場合、ExcelのFloor.Mathワークシート関数をVBAから呼び出すことができます。
ExcelのFloor.Mathワークシート関数の構文は以下のとおりです。
FLOOR.MATH(数値, [基準値], [モード])
- 数値 – 切り捨てたい数。
- 基準値 (オプション) – 四捨五入される数値の倍数。
- モード (オプション) – 負の数がゼロに向かって丸められるか、またはゼロから離れるかを制御します。
それでは、VBAコードの中でFloor.Math Worksheet関数にアクセスする方法を確認するために、例を見てみましょう。
Sub RoundDownToSignificance()
Dim unitcount As Double
Dim floormathUnitcount As Double
unitcount = 4.55555559
floormathUnitcount = Application.WorksheetFunction.Floor_Math(unitcount, 2)
MsgBox "The value is " & floormathUnitcount
End Sub
結果は以下のとおりです。
基準値への切り捨ての結果
実際の数値 | 基準値 | モード | 結果 |
---|---|---|---|
4.55555559 | 4 | ||
4.55555559 | 3 | 3 | |
4.55555559 | 50 | 0 | |
-4.55555559 | 3 | -6 | |
-4.55555559 | 3 | -1 | -3 |