Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - 文字列操作

Excel VBA VBA
スポンサーリンク

文字列操作って何をすること?

VBAでいう「文字列操作」は、ざっくり言うと、

  • 文字列の一部を取り出す
  • 文字列の中を検索する
  • 文字を置き換える
  • 分割したり、くっつけたりする

といった、「文字の並びをいじる」こと全般です。

Excelの実務だと、例えばこんな場面で必ず出てきます。

  • 「2026/02/23 14:30」から「日付だけ」「時間だけ」を取り出したい
  • 「東京都渋谷区…」から「都道府県だけ」「市区だけ」を抜き出したい
  • 「山田 太郎」の全角スペースを半角にしたい、スペースを消したい
  • 「A-001」「A-002」…の「A-」を取り除きたい
  • 「aaa,bbb,ccc」をカンマで分割して配列にしたい

こういうときに使うのが、文字列操作の基本関数たちです。


まずは「長さ」と「一部を切り出す」から

Len 関数:文字列の長さを知る

Len は「文字列が何文字あるか」を返します。

Sub SampleLen()

    Dim s As String
    Dim n As Long

    s = "ExcelVBA"
    n = Len(s)          ' n は 8 になる

    MsgBox "文字数は " & n & " 文字です。"

End Sub
VB

Len は、あとで紹介する Left / Right / Mid と組み合わせて使うことが多いです。
「右から何文字」ではなく「右から“最後の3文字”」のように、長さを使って柔軟に書けるようになります。

Left / Right 関数:左端・右端から切り出す

Left は「左から n 文字」、Right は「右から n 文字」を取り出します。

Sub SampleLeftRight()

    Dim s As String

    s = "2026/02/23"

    MsgBox Left(s, 4)   ' → "2026"
    MsgBox Right(s, 2)  ' → "23"

End Sub
VB

イメージとしては、

  • Left(s, 4) =「先頭から4文字」
  • Right(s, 2) =「末尾から2文字」

です。

日付の「年だけ」「日だけ」、商品コードの「先頭の区分」「末尾の連番」など、
「固定桁数で切る」場面でよく使います。

Mid 関数:途中から切り出す

Mid は「文字列の途中から、指定した長さだけ取り出す」関数です。

Sub SampleMid()

    Dim s As String

    s = "2026/02/23"

    MsgBox Mid(s, 6, 2)   ' 6文字目から2文字 → "02"

End Sub
VB

ここでの意味は、

  • 6文字目(「0」)から
  • 2文字分(「02」)を取り出す

ということです。

「3文字目から4文字」「2文字目から最後まで」など、
「位置を指定して切り出したい」ときに使います。


「含まれているか」「どこにあるか」を調べる InStr

InStr の基本:文字列の中を検索する

InStr は、「ある文字列の中に、探したい文字列がどこに出てくるか」を教えてくれます。

Sub SampleInStr()

    Dim s As String
    Dim pos As Long

    s = "Excel VBA 入門"
    pos = InStr(s, "VBA")   ' "VBA" が何文字目から始まるか

    If pos > 0 Then
        MsgBox "VBA は " & pos & " 文字目から始まります。"
    Else
        MsgBox "VBA は含まれていません。"
    End If

End Sub
VB

ポイントは、

  • 見つかったら「何文字目か」が返る
  • 見つからなければ 0 が返る

ということです。

「特定の文字が含まれているかどうか」だけ知りたいなら、
「InStr の結果が 0 かどうか」で判定できます。


InStr と Left / Right / Mid を組み合わせると一気に強くなる

「区切り文字より左側」「右側」を取り出す

例えば、「山田太郎@example.com」から「@より左側(ユーザー名)」だけ取り出したいとします。

Sub SampleMailUser()

    Dim mail As String
    Dim pos As Long
    Dim user As String

    mail = "yamada@example.com"
    pos = InStr(mail, "@")

    If pos > 0 Then
        user = Left(mail, pos - 1)
        MsgBox user   ' → "yamada"
    Else
        MsgBox "メールアドレスの形式ではありません。"
    End If

End Sub
VB

流れを言葉で整理すると、

  • InStr で「@ が何文字目か」を調べる
  • その1つ手前までを Left で切り出す(pos – 1 文字)

ということをしています。

逆に、「@より右側(ドメイン部分)」が欲しければ、Mid を使います。

Sub SampleMailDomain()

    Dim mail As String
    Dim pos As Long
    Dim domain As String

    mail = "yamada@example.com"
    pos = InStr(mail, "@")

    If pos > 0 Then
        domain = Mid(mail, pos + 1)   ' 2引数版:pos+1 文字目から最後まで
        MsgBox domain   ' → "example.com"
    Else
        MsgBox "メールアドレスの形式ではありません。"
    End If

End Sub
VB

ここでのポイントは、

  • 「どこから切るか」を InStr で決める
  • 「どう切るか」を Left / Mid / Right で実行する

という役割分担です。


Replace 関数:文字列の一部を置き換える

基本的な置き換え

Replace は、「文字列の中の特定の部分を、別の文字列に置き換える」関数です。

Sub SampleReplace()

    Dim s As String
    Dim t As String

    s = "Excel2016"
    t = Replace(s, "2016", "2026")

    MsgBox t   ' → "Excel2026"

End Sub
VB

意味としては、

  • s の中の「2016」を
  • 「2026」に置き換えた結果を t に入れる

ということです。

余計なスペースを消す

例えば、「山田 太郎」(全角スペース)を「山田太郎」(スペースなし)にしたい場合。

Sub SampleReplaceSpace()

    Dim s As String

    s = "山田 太郎"
    s = Replace(s, " ", "")   ' 全角スペースを空文字に置き換え

    MsgBox s   ' → "山田太郎"

End Sub
VB

「特定の文字を消したい」=「その文字を空文字に置き換える」
という発想で書けるようになると、Replace が一気に使いやすくなります。


Split / Join:文字列を「分解」したり「再結合」したり

Split:区切り文字で分解して配列にする

Split は、「区切り文字で文字列を分割して、配列にしてくれる」関数です。

Sub SampleSplit()

    Dim s As String
    Dim parts() As String

    s = "東京,大阪,名古屋"

    parts = Split(s, ",")

    MsgBox parts(0)   ' → "東京"
    MsgBox parts(1)   ' → "大阪"
    MsgBox parts(2)   ' → "名古屋"

End Sub
VB

「CSVの1行」「カンマ区切りのリスト」「セミコロン区切りの設定値」など、
「区切り文字でバラしたい」場面でよく使います。

Join:配列を文字列にくっつける

Split の逆が Join です。
配列の要素を、区切り文字でつなげて1つの文字列にします。

Sub SampleJoin()

    Dim parts(0 To 2) As String
    Dim s As String

    parts(0) = "東京"
    parts(1) = "大阪"
    parts(2) = "名古屋"

    s = Join(parts, " / ")

    MsgBox s   ' → "東京 / 大阪 / 名古屋"

End Sub
VB

「配列で持っているデータを、表示用に1行の文字列にしたい」
というときに便利です。


Trim:前後の余計な空白を削る

入力データの「前後のスペース」を掃除する

Trim は、「文字列の前後にある空白」を取り除きます(間の空白はそのまま)。

Sub SampleTrim()

    Dim s As String

    s = "  Excel VBA  "
    s = Trim(s)

    MsgBox "[" & s & "]"   ' → "[Excel VBA]"

End Sub
VB

ユーザー入力や外部データには、
「見えないけど前後にスペースが入っている」ことがよくあります。

そのままだと、

  • 「=」で比較しても一致しない
  • InStr で検索しても見つからない

といったトラブルの原因になります。

「文字列を比較する前に Trim しておく」
という癖をつけておくと、かなり安定したコードになります。


まとめ:文字列操作は「組み合わせ」が命

ここまで出てきた関数をざっくり整理すると、役割はこうです。

  • Len:長さを知る
  • Left / Right / Mid:一部を切り出す
  • InStr:どこにあるかを調べる
  • Replace:一部を置き換える・消す
  • Split / Join:分解・再結合
  • Trim:前後の余計な空白を削る

大事なのは、「1つの関数だけで何とかしよう」としないことです。
実務ではたいてい、

  • InStr で位置を調べて
  • Left / Mid / Right で切り出して
  • 必要なら Trim や Replace で整える

というように、「小さな道具を組み合わせて1つの仕事をする」形になります。

タイトルとURLをコピーしました