HOME > 即効テクニック > Excel VBA > 文字列操作関連のテクニック > 指定した数のスペースからなる文字列を返す(Space関数)

即効テクニック

文字列操作関連のテクニック

指定した数のスペースからなる文字列を返す(Space関数)

(Excel 2000)
引数Numberで指定した数の半角スペースをバリアント型(内部処理形式String)の値で返します。
Space関数を使って各列ごとの文字列のバイト数を揃える、つまり、一定の長さに満たない文字列には後ろにスペースを足りないだけ追加する、といった使い方をすれば、固定長のテキストファイルを作成することができます。

 構文 Space(Number)

 設定項目        内容
 Number     スペースの数を指定 [省略不可]


●サンプル●
Sub SpaceSamp1()
    Dim i As Long, j As Integer
    Dim myLen() As Integer
    Dim myBuf As String

    ReDim myLen(Range("A1").End(xlToRight).Column) As Integer
    '---各列のバイト数を格納する、文字配列変数の要素数を定義
    For i = 1 To Range("A1").End(xlToRight).Column
        For j = 1 To Range("A1").End(xlDown).Row
            If myLen(i) < LenB(StrConv(Cells(j, i), vbFromUnicode)) Then
                myLen(i) = LenB(StrConv(Cells(j, i), vbFromUnicode))
            '---各列での最大のバイト数を各列のバイト数にする
            End If
        Next j
    Next i
    Open ActiveWorkbook.Path & "\SpaceSamp.txt" For Output As #1
    '---アクティブブックと同じフォルダに、テキストファイルを作成します
    For j = 1 To Range("A1").End(xlDown).Row
        For i = 1 To Range("A1").End(xlToRight).Column
            myBuf = myBuf & Cells(j, i).Value & _
            Space(myLen(i) - LenB(StrConv(Cells(j, i), vbFromUnicode)) + 1)
        '---(1)Space関数を利用し、各列のバイト数が揃うようにスペースを追加
        Next i
        '---全ての列の値を連結した文字列をファイルに書き出す
        Print #1, myBuf
        '---次の行の処理の前に初期化
        myBuf = ""
    Next j
    '---ファイルを閉じる
    Close #1

End Sub

●解説●
(1)のステートメントで、各列の最大のバイト数からデータのバイト数を引いた値に1を加算した数だけのスペースを、各データの末尾に追加し、固定長の文字列を作成しています。Printステートメントについては、LineInputステートメントを参照してください。
実行結果については、作成されたテキストファイルをメモ帳などで開いて確認してください。

●注意●
Excelの標準の機能にもスペース区切りのファイルを作成する機能はありますが、各列のバイト数は列幅により設定されるため、最悪の場合にはデータが失われるなど、致命的な不具合が発生する可能性があります。