こけめも

メモみたいなもの

VBSで数字0埋めする方法

この間の仕事でのこと。

ちょっと設定ファイルというか文字列操作をするときに数字の0(ゼロ)埋めをしたかったんですが、VBSでこれを行う関数を見つけれませんでした。
ちなみに.NET(VB,C#)なんかだとString.Formatでできるようですね。

そこで関数自作してみたので一応紹介しておきます。

やりたいこと

数字を指定の桁数まで0埋めする
例) 5 , 3 ⇒ 005
99 , 4 ⇒ 0099
10 , 2 ⇒ 10

自作関数
'======================================================================
'       数値が指定桁数より小さい場合、左側を0で埋める。
'
' @Param    intNum   [IN]    0埋めしたい数値
' @Param    intBeam  [IN]    桁数
' @Return   0で埋めた後の数値文字列。
'======================================================================
Function FillLeftZero(intNum, intBeam)
   
     Dim Log10               '数値の常用対数
     Dim intBeamDif          '桁数の差
     Dim i                   'ループカウンタ

     FillLeftZero = ""
       
     'intNumの常用対数を取る(10の何乗かを取得する)
     Log10 = Log(intNum) / Log(10)

     '桁数の差を取る
     '10の0乗であれば1桁、10の1乗であれば2桁 … となるため1を足す
     intBeamDif = intBeam - (Fix(Log10) + 1)

     '桁数の差分だけ0埋め
     For i = 1 to intBeamDif
        FillLeftZero = FillLeftZero + "0"
     Next
     'もとの数字を付け加える
     FillLeftZero = FillLeftZero + CStr(intNum)
   
End Function
とかやってるうちに

VBでの方法どうだったかなーとか調べてたらもっと短く実装されている関数を見つけてしまった…
勝手に数字として扱わないといけないと思い込んでいたようです。


VB6 - 指定の文字数になるまで先頭を文字で埋める
を参考にVBS用にカスタマイズしたものを記載させていただきます。
勉強になります。

'==================================================================================
'       指定の文字数になるまで先頭を文字で埋めます。
'
' @Param    stTarget    処理対象となる文字列。
' @Param    iLength     文字の長さ。
' @Param    [chOne]     埋める文字。
' @Return               先頭を指定の文字で iLength の長さまで埋められた文字列。
'==================================================================================
Function PadLeft(stTarget, iLength , chOne)
   Do While (Len(stTarget) < iLength)
       stTarget = chOne & stTarget
   Loop

   PadLeft = Right(stTarget, iLength)
End Function