Excel VBAで業務自動化を行う際、避けて通れないのが 文字列操作 です。
セルの値、ファイル名、CSVデータ、ログ情報、ユーザー入力など、VBAが扱うデータの多くは文字列として渡されます。
その中でも特に使用頻度が高いのが、
- 文字列の途中を取り出す Mid
- 文字列の左側を取り出す Left
- 文字列の右側を取り出す Right
という3つの基本関数です。
一見すると単純な関数ですが、実務では次のような悩みがよく発生します。
- どの関数を使えばよいか判断できない
- 桁数が変わると動かなくなる
- 文字数が足りない場合にエラーになる
- InStrとどう組み合わせればいいか分からない
この記事では、Mid・Left・Right関数の基本構文から、実務で壊れない使い方、設計の考え方、応用パターンまでを徹底的に解説します。
最後まで読むことで、「何となく使う」状態から脱却し、意図を持って文字列操作を書けるVBAエンジニアになれるはずです。
目次
- ✅ Mid・Left・Right関数とは何かを正しく理解する
- ・3つの関数の役割一覧
- ✅ Left関数の基本と実務での使いどころ
- ・Left関数の基本構文
- ・最も基本的な使用例
- ・Left関数が向いている実務例
- ✅ Right関数の基本と実務での使いどころ
- ・Right関数の基本構文
- ・基本的な使用例
- ・Right関数が活躍する実務例
- ✅ Mid関数の基本構文と考え方
- ・Mid関数の基本構文
- ・基本的な使用例
- ✅ 文字数が足りない場合の挙動を理解する
- ・Left / Right の場合
- ・Midの場合
- ✅ InStrと組み合わせた実務的な使い方
- ・特定文字より左を取得する
- ・特定文字より右を取得する
- ✅ Mid × InStr × Len の王道パターン
- ✅ 実務で必須:存在チェックを含めた安全設計
- ✅ Split関数との違いと使い分け
- ・Splitが向いているケース
- ・Mid / Left / Right が向いているケース
- ✅ 実務でよくあるNGパターン
- ・文字数を固定値で決め打ちしている
- ・存在チェックをしていない
- ・可読性の低いネスト構造
- ✅ Function化して再利用性を高める
- ✅ セル操作と組み合わせた実務例
- ✅ 業務自動化での活用シーン
- ✅ まとめ:Mid・Left・Rightを理解し、文字列操作に強いVBAを書く
✅ Mid・Left・Right関数とは何かを正しく理解する
文字列操作関数は、単に文字を切り取るための道具ではありません。
データを意味のある形に変換するための基礎技術です。
まずは、それぞれの役割を整理しましょう。
・3つの関数の役割一覧
- Left:文字列の左側から指定文字数を取得
- Right:文字列の右側から指定文字数を取得
- Mid:文字列の途中から指定文字数を取得
どれも似たように見えますが、役割と使いどころは明確に異なります。
✅ Left関数の基本と実務での使いどころ
Left関数は、文字列の先頭から指定した文字数を取得する関数です。
最もシンプルで、実務でも頻繁に使われます。
・Left関数の基本構文
Left(文字列, 取得する文字数)
・最も基本的な使用例
Sub LeftBasic()
Dim text As String
text = "ABC123"
MsgBox Left(text, 3)
End Sub
結果は、
ABC
となります。
・Left関数が向いている実務例
- 商品コードの先頭3文字
- 支店コードの識別部分
- 固定フォーマット文字列の分類
Leftは、「先頭から必ず同じ意味を持つ文字列」を扱う場合に非常に有効です。
✅ Right関数の基本と実務での使いどころ
Right関数は、文字列の末尾から指定した文字数を取得します。
・Right関数の基本構文
Right(文字列, 取得する文字数)
・基本的な使用例
Sub RightBasic()
Dim text As String
text = "ABC123"
MsgBox Right(text, 3)
End Sub
結果は、
123
になります。
・Right関数が活躍する実務例
- 日付文字列の「日」部分
- ファイル拡張子の取得
- 連番の末尾番号
特に、拡張子判定や下位コード取得では定番の関数です。
✅ Mid関数の基本構文と考え方
Mid関数は、文字列の途中を取得するための関数です。
Left・Rightよりも自由度が高く、その分使い方を誤るとバグの原因になります。
・Mid関数の基本構文
Mid(文字列, 開始位置, 取得文字数)
※ 開始位置は 1から始まる 点に注意が必要です。
・基本的な使用例
Sub MidBasic()
Dim text As String
text = "ABC123"
MsgBox Mid(text, 2, 3)
End Sub
結果は、
BC1
になります。
✅ 文字数が足りない場合の挙動を理解する
実務で非常に重要なのが、指定した文字数より短い場合の挙動です。
・Left / Right の場合
MsgBox Left("ABC", 10)
エラーにはならず、
ABC
が返ります。
・Midの場合
MsgBox Mid("ABC", 5, 3)
空文字が返ります。
👉 エラーにならないが、結果が空になる
この挙動を知らないと、原因不明の不具合になります。
✅ InStrと組み合わせた実務的な使い方
文字列操作の実務では、
Mid単体で使うより、InStrと組み合わせるケースが圧倒的に多いです。
・特定文字より左を取得する
Sub GetLeftByInStr()
Dim text As String
text = "ABC-123"
MsgBox Left(text, InStr(text, "-") - 1)
End Sub
結果:
ABC
・特定文字より右を取得する
Sub GetRightByInStr()
Dim text As String
text = "ABC-123"
MsgBox Mid(text, InStr(text, "-") + 1)
End Sub
結果:
123
参考:【VBA】文字列検索を部分一致で行う方法|Find・InStr・ループを使った実務サンプル
✅ Mid × InStr × Len の王道パターン
「〇〇と〇〇の間を取得する」処理は、
VBA文字列操作の中でも最重要パターンです。
Sub GetBetween()
Dim text As String
Dim startPos As Long
Dim endPos As Long
text = "【商品A】売上"
startPos = InStr(text, "【")
endPos = InStr(text, "】")
MsgBox Mid(text, startPos + 1, endPos - startPos - 1)
End Sub
✅ 実務で必須:存在チェックを含めた安全設計
実務では、「必ず文字列が存在する」前提は危険です。
If InStr(text, "-") = 0 Then
Exit Sub
End If
このような 事前チェック を必ず入れましょう。
参考:【VBA】Boolean型とは?True/Falseの使い方と実務での注意点を徹底解説
✅ Split関数との違いと使い分け
・Splitが向いているケース
- 区切り文字が1種類
- 構造が単純
・Mid / Left / Right が向いているケース
- 前後関係が重要
- 例外処理が必要
- 構造が一定でない
業務VBAでは後者が圧倒的に多いです。
✅ 実務でよくあるNGパターン
・文字数を固定値で決め打ちしている
・存在チェックをしていない
・可読性の低いネスト構造
これらは、後から必ず修正コストが発生します。
✅ Function化して再利用性を高める
文字列処理は、Function化することで品質が一段上がります。
Function GetLeftSafe(ByVal text As String, ByVal count As Long) As String
GetLeftSafe = Left(text, count)
End Function
✅ セル操作と組み合わせた実務例
Sub UseWithCell()
Dim val As String
val = Range("A1").Value
Range("B1").Value = Left(val, 4)
End Sub
✅ 業務自動化での活用シーン
Mid・Left・Rightが使いこなせると、
- CSVデータ整形
- ファイル名解析
- ログ解析
- RPA前処理
など、業務自動化の幅が一気に広がります。
参考:【Excel】CSVの先頭ゼロを消さない方法|文字化け・自動変換を完全防止
✅ まとめ:Mid・Left・Rightを理解し、文字列操作に強いVBAを書く
- Left:先頭固定情報の取得
- Right:末尾情報の取得
- Mid:柔軟な部分抽出
- InStrと組み合わせるのが実務の基本
- 存在チェックを必ず入れる
- Function化で保守性を高める
Mid・Left・Rightは、
VBA文字列操作の三種の神器です。
この3つを正しく理解すれば、
文字列処理で悩む時間は大幅に減り、
「考えるべき本質的な業務」に集中できるようになります。