Excel VBA VBAマクロ

VBAを使って半角数字を右寄せにして固定長に変換したい

Excelで管理している数値データを固定長に変換して、他のシステムに渡さなければならない場合にVBAを使った実現方法をご紹介しましょう。

要件は「半角数字を右寄せにして固定長に変換したい」と想定してプログラムを作成しました。
 

関数の使い方

引数
  • strInput:変換対象となる文字列です。あらかじめ数値を文字列に変換してから渡してください。
  • lngDigit:固定長としたい桁数を指定してください。
戻り値
固定長に変換した文字列を返します。
補足説明
  • strInputをlngDigitに合わせた固定長文字列を作成します。
  • 不足している文字数は左から半角スペースで埋めます。
  • 想定外のデータが入った場合は指定された文字数の半角文字列を返します。

呼び出し例(ソースコード)

Sub Main()

    Dim dblData As Double
    Dim strSet As String
    Dim strOutput As String

    ' データの設定
    dblData = 10.2
    
    ' フォーマット関数を使ってあらかじめ小数点以下の桁数を整備
    strSet = Format(dblData, "0.00")
      
    ' 取得した文字列を指定した桁の固定長に変換する処理をする
    strOutput = SetFixedLength(strSet, 8)

    MsgBox strOutput

End Sub

関数のソースコード

Function SetFixedLength(ByVal strInput As String, ByVal lngDigit As Long) As String

    ' 変数の宣言
    Dim lngLen As Long      ' strInputの文字列の長さ
    Dim strRet As String    ' 最終的に戻り値となる変数
    Dim lngLoop As Long     ' ループ用変数
        
    ' [エラー処理]strInputに全角が入っていた場合
    If Len(strInput) <> LenB(StrConv(strInput, vbFromUnicode)) Then
        ' 指定された文字数の半角文字を戻り値として返す
        For lngLoop = 1 To lngDigit
            strRet = strRet & " "
        Next
        
        SetDigit = strRet
        Exit Function
    End If
    
    ' [エラー処理]指定された桁数が0以下の場合は空文字を返す
    If lngDigit <= 0 Then
        strRet = ""
        SetDigit = strRet
        Exit Function
    End If
   
    ' 変数の初期化
    lngLen = Len(strInput)  ' strInputの文字列の数を取得
    strRet = strInput       ' 戻り値にstrInputを代入

    ' 文字数が指定桁数より小さい場合は半角スペースを入れる処理をする
    ' 文字数が指定桁数よりも大きい場合は文字列をそのまま返す
    If lngLen < lngDigit Then
        ' 不足している桁数分の半角スペースを前方に入れる
        For lngLoop = lngLen + 1 To lngDigit
            strRet = " " & strRet
        Next
    End If

    ' 戻り値を設定
    SetDigit = strRet

End Function

-Excel, VBA, VBAマクロ
-, , ,