VBA String 関数:指定した文字で埋める

はじめに

Excel VBA マクロの String 関数から指定した文字で埋める方法を紹介します。

String 関数は、文字を指定した数だけ並べて返します。

3 個の A なら AAA を返します。

文字列を 0 や空白で埋めたいときに使用します。

空白 (スペース) で埋めたいときは「Space 関数」を使用します。
文字列を結合するには「文字列を結合する」をご覧ください。
  • 目次
    • String 関数
    • 解説
    • 使用例

String 関数

String(, 文字)
文字を指定しただけ繰り返した文字列を取得します。

引数「数」数値を指定します。
引数「文字」文字や文字コード (Shift_JIS) を指定します。
戻り値の型文字列型 (String)

解説

引数「数」が 3 なら AAA のように、引数「文字」を 3 回繰り返した文字列を返します。

引数「数」が負の値なら「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。

引数「文字」には文字または文字コード (Shift_JIS) の両方を指定できます。

引数「文字」に複数の文字を指定したときは 1 文字目の文字で並べられます。vbCrLf なら vbCr になります。

引数「文字」が空文字 "" なら「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。

Len 関数」を使用して、文字列の文字数を取得できます。これで文字列の先頭や最後を 10 文字になるように引数「文字」で埋めることができます。

文字コードを取得するには「Asc 関数」を使用します。

使用例

指定した数の文字を取得する。

Dim s As String
s = String(0, "あ")
Debug.Print(s) ' 

s = String(1, "あ")
Debug.Print(s) ' あ

s = String(3, "あ")
Debug.Print(s) ' あああ

s = String(3, "あい")
Debug.Print(s) ' あああ

s = String(-1, "あ")
Debug.Print(s) ' エラー

s = String(1, "")
Debug.Print(s) ' エラー

指定した数の文字コードの文字を取得する。

Dim i As Integer
Dim s As String

i = Asc("a")
Debug.Print(i) ' 97

s = String(3, 65)
Debug.Print(s) ' AAA

i = Asc("あ")
Debug.Print(i) ' -32096

s = String(3, -32096)
Debug.Print(s) ' あああ

指定した文字数になるように埋める

10 文字未満の文字列を 10 文字になるように文字で埋めます。関数を作成すると便利です。

Sub 実行()
    Dim 文字列 As String
    文字列 = "12345"

    Dim s As String

    s = 文字列 & String(10 - Len(文字列), "_")
    Debug.Print(s) ' "12345_____"

    s = PadLeft(文字列, 10, "_")
    Debug.Print(s) ' "12345_____"

    s = String(10 - Len(文字列), "_") & 文字列
    Debug.Print(s) ' "_____12345"

    s = PadRight(文字列, 10, "_")
    Debug.Print(s) ' "_____12345"
End Sub

' 指定した文字列の先頭を文字で埋める
Function PadLeft(text As String, length As Long, char As String)

    If length < Len(text) Then
        PadLeft = text
        Exit Function
    End If
    
    PadLeft = text & String(length - Len(text), char)

End Function

' 指定した文字列の最後を文字で埋める
Function PadRight(text As String, length As Long, char As String)

    If length < Len(text) Then
        PadRight = text
        Exit Function
    End If
    
    PadRight = String(length - Len(text), char) & text

End Function