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