VBScript で数値をカンマ区切り表示する (unibon)

2002年09月03日: 新規作成。
VBScript で数値をカンマ区切りで表示します。
金額を表示するときなどは 95839285734.3245円と表示するよりも 95,839,285,734.3245円と表示したいことがあります。
VBScript には標準で FormatCurrency 関数などはあるのですが、 FormatCurrency 関数は数値をフォーマットする機能の一環としてカンマで桁を区切ります。 そのため実行環境の違いが変換結果が影響してしまうなどの副作用があり、使いにくい場合もあります。 今回の MyFormatNumber 関数では、カンマで3桁ごとに区切るという単機能に特化していますので、そのような問題はありません。

なお JavaScript 版は こちら です。


使用例:
Dim x
x = 95839285734.3245
Dim y
y = MyFormatNumber(x)
Call MsgBox(y)

' (すべての変数に格納する値は0オリジンとする) 
Function MyFormatNumber(ByVal x) ' 引数の例としては 95839285734.3245
    Dim s
    s = CStr(x) ' 確実に文字列型に変換する。例では "95839285734.3245"
    Dim p
    p = InStr(0 + 1, s, ".") - 1 ' 小数点の位置を0オリジンで求める。例では 11
    If p < 0 Then ' 小数点が見つからなかった時
        p = Len(s) ' 仮想的な小数点の位置とする
    End If
    Dim r
    r = Mid(s, p + 1) ' 小数点の桁と小数点より右側の文字列。例では ".3245"
    Dim i
    For i = 0 To p - 1 ' (10 ^ i) の位について
        Dim c
        c = Mid(s, p - 1 - i + 1, 1) ' (10 ^ i) の位のひとつの桁の数字。例では "4", "3", "7", "5", "8", "2", "9", "3", "8", "5", "9" の順になる。
        If c < "0" Or c > "9" Then ' 数字以外のもの(符合など)が見つかった
            r = Left(s, p - i) & r ' 残りを全部付加する
            Exit For
        End If
        If i > 0 And i Mod 3 = 0 Then ' 3 桁ごと、ただし初回は除く
            r = "," & r ' カンマを付加する
        End If
        r = c & r ' 数字を一桁追加する。
    Next
    MyFormatNumber = r ' 例では "95,839,285,734.3245"
End Function

ASP の目次
ホーム
(このページ自身の絶対的な URL)