VBAテクニック集 VBA一覧 文法・構文 関数・イベント

【VBA】文字列操作関数【Mid・Left・Right】|実務で使い倒す完全ガイド

Excel VBAで業務自動化を行う際、避けて通れないのが 文字列操作 です。
セルの値、ファイル名、CSVデータ、ログ情報、ユーザー入力など、VBAが扱うデータの多くは文字列として渡されます。

その中でも特に使用頻度が高いのが、

  • 文字列の途中を取り出す Mid
  • 文字列の左側を取り出す Left
  • 文字列の右側を取り出す Right

という3つの基本関数です。

一見すると単純な関数ですが、実務では次のような悩みがよく発生します。

  • どの関数を使えばよいか判断できない
  • 桁数が変わると動かなくなる
  • 文字数が足りない場合にエラーになる
  • InStrとどう組み合わせればいいか分からない

この記事では、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では後者が圧倒的に多いです。

参考:【VBA】Split関数:文字列を分割する方法


✅ 実務でよくある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つを正しく理解すれば、
文字列処理で悩む時間は大幅に減り、
「考えるべき本質的な業務」に集中できるようになります。

参考:【VBA】Function で複数の戻り値を返す方法と活用例

    -VBAテクニック集, VBA一覧, 文法・構文, 関数・イベント