【VBScript】数値を指定された桁数で切り捨てる(切り上げる)

Windows PC

こんにちは、ふみです。みなさんは VBScirpt で Excel の ROUNDDOWN(ROUNDUP)関数のように数値を指定された桁数で端数を切り捨て(切り上げ)ようと思ったことはありますか?

今回は数値の端数を切り捨てる方法と切り上げる方法について紹介します。

端数を切り捨てて数値の整数部分を返す(Fix関数、Int関数)

VBScript や VBA に組み込まれている 端数を切り捨てて整数を返す関数は Fix関数と Int関数の2つがあります。

2つの関数は対象の数値が負の場合に違いがでます。Fix 関数は 0 に近い数値の整数を返すのに対し、Int関数は 0 から遠い整数を返します。

Fix関数の引数が「3.5」の場合、戻り値は「3」になりますが、引数が「-3.5」の場合、戻り値は「-3」になります。Int関数の引数が「-3.5」の場合、戻り値は「-4」になります

Fix関数の小数点以下を切り捨てる動作は Excel関数の TRUNC関数、ROUNDDOWN関数と同じです。

数値を指定された桁数で切り捨てる

数値を指定された桁数で切り捨てる場合、対象の数値が負の数の時に 0 に近い数値を返す方法と 0 から遠い数値を返す方法があります。

対象の数値が負の時に 0 に近い数値を返す(ROUNDDOWN関数)

数値を指定された桁数で切り捨てるとき、対象の数値が負の数の時に 0 に近い数値を返す方法は、Excel関数の ROUNDDOWN関数と同じです。

ここでは円周率 Pi と -Pi をそれぞれ小数点第2位を指定して(負の数は 0 に近い数値に)切り捨てる例を紹介します。サンプルプログラムは次のとおりです。

Option Explicit
Const c_dblPi = 3.1415

MsgBox "Pi = " & RoundDown(c_dblPi, 2) & vbCrLf _
    & "-Pi = " & RoundDown(-c_dblPi, 2), , "RoundDown"
WScript.Quit


'******************************************************************************
'引数dblNumberを桁数intDigitで切り捨てた戻り値を返す(負の数は0に近い数値)
Function RoundDown(ByVal dblNumber, ByVal intDigit)
    
    RoundDown = Fix(dblNumber / 10 ^ -intDigit) * 10 ^ -intDigit
End Function

上記のコードを Windows 10 のアクセサリから開いたメモ帳へコピー&ペースト後、文字コードを「ANSI」に設定し、適当なファイル名に拡張子「.vbs」をつけてデスクトップ等に保存すると、すぐに動作確認できます。
保存した vbsファイルをダブルクリックすると、円周率 Pi と -Pi をそれぞれ小数点第2位を指定して切り下げた数値がメッセージで表示されます。
-Pi は 0 に近い数値「-3.14」が表示されます。

このファンクションは Excel等の VBA でも動作します。

対象の数値が負の時に 0 から遠い数値を返す

数値を指定された桁数で切り捨てるとき、対象の数値が負の数の時に 0 から遠い数値を返す方法もあります。プログラムの処理ではこちらの方が良く使われます。

ここでは円周率 Pi と -Pi をそれぞれ小数点第2位を指定して(負の数は 0 から遠い数値に)切り捨てる例を紹介します。サンプルプログラムは次のとおりです。

Option Explicit
Const c_dblPi = 3.1415

MsgBox "Pi = " & RoundFloor(c_dblPi, 2) & vbCrLf _
    & "-Pi = " & RoundFloor(-c_dblPi, 2), , "RoundFloor"
WScript.Quit


'******************************************************************************
'引数dblNumberを桁数intDigitで切り捨てた戻り値を返す(負の数は0から遠い数値)
Function RoundFloor(ByVal dblNumber, ByVal intDigit)
    
    RoundFloor = Int(dblNumber / 10 ^ -intDigit) * 10 ^ -intDigit
End Function

上記のコードを Windows 10 のアクセサリから開いたメモ帳へコピー&ペースト後、文字コードを「ANSI」に設定し、適当なファイル名に拡張子「.vbs」をつけてデスクトップ等に保存すると、すぐに動作確認できます。
保存した vbsファイルをダブルクリックすると、円周率 Pi と -Pi をそれぞれ小数点第2位を指定して切り下げた数値がメッセージで表示されます。
-Pi は 0 から遠い数値「-3.15」が表示されます。

このファンクションは Excel等の VBA でも動作します。

数値を指定された桁数で切り上げる

数値を指定された桁数で切り上げる場合も、対象の数値が負の数の時に 0 から遠い数値を返す方法と 0 に近い数値を返す方法があります。

対象の数値が負の時に 0 から遠い数値を返す(ROUNDUP関数)

数値を指定された桁数で切り上げるとき、対象の数値が負の数の時に 0 から遠い数値を返す方法は、Excel関数の ROUNDUP関数と同じです。

端数を切り上げる(数値が負の数の時に 0 から遠い数値の整数を返す)サンプルコードは次のとおりです。

Option Explicit
Const c_dblPi = 3.1415

MsgBox "Pi = " & RoundUp(c_dblPi, 2) & vbCrLf _
    & "-Pi = " & RoundUp(-c_dblPi, 2), , "RoundUp"
WScript.Quit


'******************************************************************************
'引数dblNumberを桁数intDigitで切り上げた戻り値を返す(負の数は0から遠い数値)
Function RoundUp(ByVal dblNumber, ByVal intDigit)
    
    If Fix(dblNumber / 10 ^ -intDigit) * 10 ^ -intDigit = dblNumber Then
        RoundUp = dblNumber
    ElseIf dblNumber > 0 Then
        RoundUp = (Fix(dblNumber / 10 ^ -intDigit) + 1) * 10 ^ -intDigit
    Else
        RoundUp = (Fix(dblNumber / 10 ^ -intDigit) - 1) * 10 ^ -intDigit
    End If
End Function

上記のコードを Windows 10 のアクセサリから開いたメモ帳へコピー&ペースト後、文字コードを「ANSI」に設定し、適当なファイル名に拡張子「.vbs」をつけてデスクトップ等に保存すると、すぐに動作確認できます。
保存した vbsファイルをダブルクリックすると、円周率 Pi と -Pi をそれぞれ小数点第2位を指定して切り上げた数値がメッセージで表示されます。
-Pi は 0 から遠い数値「-3.15」が表示されます。

このファンクションは Excel等の VBA でも動作します。

対象の数値が負の時に 0 に近い数値を返す

数値を指定された桁数で切り上げるとき、対象の数値が負の数の時に 0 に近い数値を返す方法もあります。プログラムの処理ではこちらの方が良く使われます。

ここでは円周率 Pi と -Pi をそれぞれ小数点第2位を指定して(負の数は 0 から遠い数値に)切り上げる例を紹介します。サンプルプログラムは次のとおりです。

Option Explicit
Const c_dblPi = 3.1415

MsgBox "Pi = " & RoundCeil(c_dblPi, 2) & vbCrLf _
    & "-Pi = " & RoundCeil(-c_dblPi, 2), , "RoundCeil"
WScript.Quit


'******************************************************************************
'引数dblNumberを桁数intDigitで切り上げた戻り値を返す(負の数は0に近い数値)
Function RoundCeil(ByVal dblNumber, ByVal intDigit)
    
    If Int(dblNumber / 10 ^ -intDigit) * 10 ^ -intDigit = dblNumber Then
        RoundCeil = dblNumber
    Else
        RoundCeil = (Int(dblNumber / 10 ^ -intDigit) + 1) * 10 ^ -intDigit
    End If
End Function

上記のコードを Windows 10 のアクセサリから開いたメモ帳へコピー&ペースト後、文字コードを「ANSI」に設定し、適当なファイル名に拡張子「.vbs」をつけてデスクトップ等に保存すると、すぐに動作確認できます。
保存した vbsファイルをダブルクリックすると、円周率 Pi と -Pi をそれぞれ小数点第2位を指定して切り下げた数値がメッセージで表示されます。
-Pi は 0 に近い数値「-3.14」が表示されます。

このファンクションは Excel等の VBA でも動作します。

まとめ

  • Fix関数は引数が「-3.5」の場合、戻り値は「-3」になるが、Int関数は引数が「-3.5」の場合、戻り値は「-4」になる
  • Excel関数の ROUNDDOWN関数は数値を指定された桁数で切り捨てるとき、対象の数値が負の数の時に 0 に近い数値を返す
  • Excel関数の ROUNDUP関数は数値を指定された桁数で切り捨てるとき、対象の数値が負の数の時に 0 から遠い数値を返す

ありがとうございました。

コメント

タイトルとURLをコピーしました