文字列操作って何をすること?
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
VBLen は、あとで紹介する 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つの仕事をする」形になります。
