VBAで文字列を扱っていると、次のようなことはありませんか?
- 文字列の途中を取り出したい
- 特定の位置のデータを抽出したい
- IDや日付を分解したい
このような場合は、Mid関数を使うことで解決できます。
文字列の途中から指定した文字数を取り出すことができる関数です。
この記事では、Mid関数の基本から実務での活用方法まで分かりやすく解説します。
この記事でできること
- 文字列の途中を抽出できる
- 文字列の分解ができる
- 実務で使えるコードが分かる
基本:Mid関数の使い方
基本構文はこちらです。
Mid(文字列, 開始位置, [文字数])
- 文字列 → 対象の文字列
- 開始位置 → 何文字目から取得するか
- 文字数 → 何文字取得するか(省略可)
例:
MsgBox Mid("ABCDE", 2, 3)
→ BCD
Mid関数の特徴
- 途中から文字列を取得できる
- 開始位置は「1」から
- 文字数は省略可能
基本例
Dim str As String
str = "ExcelVBA"
MsgBox Mid(str, 6, 3)
→ VBA
文字数を省略した場合
開始位置から最後まで取得されます。
MsgBox Mid("ABCDE", 3)
→ CDE
セルの値から抽出する
Range("B1").Value = Mid(Range("A1").Value, 2, 3)
A1の2文字目から3文字を取得します。
日付データの分解(よく使う)
yyyymmdd形式の文字列から月を取得します。
Dim str As String
str = "20240101"
MsgBox Mid(str, 5, 2)
→ 01(月)
条件分岐で使う
Dim code As String
code = "A12345"
If Mid(code, 2, 1) = "1" Then
MsgBox "条件一致"
End If
Left・Rightとの違い
| 関数 | 内容 |
|---|---|
| Left | 左から取得 |
| Mid | 途中から取得 |
| Right | 右から取得 |
Mid関数(代入型)の使い方(応用)
Midは文字列の一部を書き換えることもできます。
Dim str As String
str = "ABCDE"
Mid(str, 2, 2) = "XX"
MsgBox str
→ AXXDE
この使い方は少し応用ですが非常に便利です。
実務での活用例
- コードの分解
- 日付データの分割
- 文字列の抽出処理
- データ整形
特にデータ加工でよく使われます。
注意点
① 開始位置は1から
0ではなく1スタートです。
② 範囲外は空文字になる
Mid("ABC", 10, 2) ' → ""
③ Nullに注意
Nullの場合はエラーになります。
安全な書き方(おすすめ)
Dim val As Variant
val = Range("A1").Value
If Not IsNull(val) Then
MsgBox Mid(val, 2, 3)
End If
よくあるエラーと対処法
① 型が一致しません
Nullやエラー値の可能性があります。
② 思った文字が取得できない
開始位置や文字数を確認してください。
③ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- Midは途中から文字列を取得する関数
- 文字列分解の基本
- Left・Rightとセットで覚える
- データ加工で非常に重要
Mid関数を使いこなせるようになると、文字列処理の自由度が大きく向上します。
VBAでは頻出の関数なので、ぜひマスターしておきましょう。

コメント