【VBA】文字列を切り出しする方法~Left関数・Right関数・Mid関数・Instr関数の使い方~
「氏名」から「苗字」だけを切り出したい、「住所」から「郵便番号」を切り出したい
こんな処理をVBAを使って自動化する方法をご紹介します。
この記事では、
VBAでLeft、Right、Mid、Instr関数を使って文字列を操作する方法
をコピペできるVBAコードや図を使って詳しくご紹介しています。
ルーティーン作業を毎日繰り返し行っている、よく編集ミスを発生させてしまう、
こんな方は是非本記事を参考に編集作業を自動化してみてください。
目次
VBA文字列切り出しの基本を完全解説!
文字列操作VBAは、エクセル作業において最も必要とされるスキルの一つです。
文字列操作VBAでは、
Left、Right、Mid、Instr関数を使って致傷とする文字列から必要な部分を切り出したり、不要な部分を削除する
ことができます。
文字列操作VBAに必要な関数の使い方を1つ1つ詳しくご紹介していきますので順番に確認していってください。
Left関数で文字列の左側を切り出す方法
Left関数は文字列の左側から指定した文字数を取り出す関数です。
「顧客番号」や「郵便番号」の先頭部分を抽出したい
という場面で使われます。
基本的構文
Left(文字列, 文字数)
Left関数を使ったサンプルコード
Sub LeftFunctionExample()
Dim strCustomerCode As String
strCustomerCode = "A12345-東京支店"
' 左側から5文字を抽出
Dim result As String
result = Left(strCustomerCode, 5)
' 結果は "A1234" となる
MsgBox result
End Sub
3行目のコードは変数「strCustomerCode」に文字列「A12345-東京支店」を格納する
6行目のコードはLeft関数で変数「strCustomerCode」の先頭5文字を変数「result」に格納する
という内容です。
Right関数で文字列の右側を切り出す方法
Right関数は、L文字列の右側から指定した文字数を取り出す関数です。
ファイル名の拡張子を抽出したい、電話番号の下4桁を取得したい
という場面で使われます。
基本的構文
Right(文字列, 文字数)
Right関数を使ったサンプルコード
Sub RightFunctionExample()
Dim strFileName As String
strFileName = "report2023.xlsx"
' 右側から5文字を抽出(拡張子を取得)
Dim fileExtension As String
fileExtension = Right(strFileName, 5)
' 結果は "xlsx" となる
MsgBox fileExtension
End Sub
3行目のコードは変数「strFileName」にブック名「report2023.xlsx」を格納する
7行目のコードはRight関数で変数「strFileName」の最後の5文字を変数「fileExtension」に格納する
という内容です。
Mid関数で文字列の中間部分を切り出す方法
Mid関数は、文字列の途中から指定した文字数を取り出す関数です。
開始位置と取得する文字数を指定できるため、より柔軟な文字列操作が可能になります。
基本構文
Mid(文字列,切り出しの開始位置,切り出す長さ「省略可能」)
Mid関数を使ったサンプル事例
Mid関数はVBAによる文字列操作において最も使用頻度の高い関数なので、自由に扱えるようにしておきましょう。
理解を深めるために簡単なサンプル事例を使って解説していきます。
サンプル事例
1列目の「文字列」から2列目の「切り出し開始位置」と3列目の「切り出す長さ」情報を元に切り出しを実行し、結果を4列目に表示する
という内容です。
サンプルコードがこちら
Sub サンプル()
Cells(2, 4) = Mid(Cells(2, 1), 1, 3)
Cells(3, 4) = Mid(Cells(3, 1), 3)
Cells(4, 4) = Mid(Cells(4, 1), 5, 5)
Cells(5, 4) = Mid(Cells(5, 1), 10)
Cells(6, 4) = Mid(Cells(6, 1), 11, 1)
End Sub
Mid関数で切り出した結果を4列目に表示
という内容です。
実行結果がこちら
Left関数やRight関数と組み合わせることで、柔軟なテキスト操作を実行できるようになります。
Instr関数で文字列の中間部分を切り出す方法
Instr関数は文字列の中から指定した文字を検索し、最初に合致した文字位置を返す関数です。
テキストから指定する文字列を検索することができるので、
文章から特定のテキストを抽出する
ことが可能になります。
基本構文
Instr(開始位置,検索される文字列,検索する文字列,比較)
開始位置・・・検索開始位置を指定
検索される文字列・・・元となる文字列を指定
検索する文字列・・・検索キーワードを指定
比較・・・大文字と小文字を区別して検索をするかを指定
Instr関数を使ったサンプル事例
VBA初心者にとって、Instr関数はちょっと難しいですよね。

疲れ果てた人
なので、Instr関数の動きを具体的に理解できるよう簡単なサンプル事例を用いて詳しくご紹介します。
サンプル事例がこちら
1列目の「対象となる文字列」から3列目の「検索値」は左から何番目に位置しているのかを検出する
という内容です。
サンプルコードがこちら
Sub sample()
Cells(2, 4) = InStr(Cells(2, 1), 3)
Cells(3, 4) = InStr(5, Cells(3, 1), "d")
Cells(4, 4) = InStr(5, Cells(3, 1), "b")
Cells(5, 4) = InStr(1, Cells(5, 1), "d", vbTextCompare)
Cells(6, 4) = InStr(1, Cells(6, 1), "D", vbTextCompare)
End Sub
3列目の「検索値」が左から何番目にあるのかを4列目に表示。
という内容です。
実行結果がこちら
Instr関数は上手に使えば、
文章から特定のキーワードを検索したり抜き取ったりする
ことが可能になります。

ガッツポーズの人
文字列の切り出しVBAを実務に応用するテクニック
上記で紹介してきた、Left関数、Right関数、Mid関数、Instr関数を組み合わせてることで複雑な文字列操作が可能になります。
広範囲の文字列操作、データクレンジングや文字列加工の自動化、など
ミスが起こりやすい手間のかかる編集作業を自動化することが可能。
ここからは、エクセル業務でよく使われる事例を参考に文字列の切り出しVBAの作り方をご紹介します。
()の中を切り出すVBA
文章中にある()内のテキストを切り出すVBAの作り方をご紹介します。
サンプル事例がこちら
1列目に入力されたテキストで()内の文字を2列目に切り出す
という内容です。
設定したサンプルコードがこちら
Sub 切り出し2()
On Error Resume Next
gyo = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To gyo
ds1 = InStr(Cells(i, 1), "(")
ds2 = InStr(Cells(i, 1), ")")
df = Mid(Cells(i, 1), ds1 + 1, ds2 - (ds1 + 1))
Cells(i, 2) = df
Next
End Sub
3行目は、1列目の最終行を変数gyoに格納する
4行目からは、2行目から変数gyoまでを繰り返す
5行目から8行目は、()内の文字を2列目に入力する
という意味です。
実行結果がこちら
サンプル事例では、()ですが「」や『』でも対応可能です。

ガッツポーズの人
関連記事「VBA基本コード15選」では、
「指定するテキストを抽出するVBA」や「日付でテキストを抽出するマクロ」など、エクセル業務で役立つVBAが多数設定されたエクセルファイルをダウンロード
することができます。
設定されているコードをコピペして使う、設定されているVBAをアレンジして使う、などいろんな方法で活用可能。
エクセル業務を自動化するアイデアがきっと見つかるはずです。
VBAで作業効率をアップしたい!と考えている方は是非参考にしてみてください。
エラー回避!文字列切り出しVBAの注意点とトラブルシューティング
VBAが設定されたエクセルファイルをいろんな人が操作する場合、
エラー発生時の回避方法
がとても重要です。
ここからは、よくある事案を元にエラー回避のテクニックをご紹介します。
文字列の切り出しVBA作成のポイント
文字列の切り出しVBAは以下のポイントを意識してコード作りを実践してください。
- 切り出し文字数を短くする
- 対象の文字数を取得する
- 文字列、数値、半角全角、大文字、小文字の違いを区別する
これらのポイントを意識することでエラーの発生を未然に防ぐことができます。
安全に文字列を操作するためのテクニック
文字列の切り出しVBAでエラーを回避する方法として
対象とする文字列が空白のとき処理を終了する、対象とする文字列が短いとき処理を終了する、
といったようなコードの付与がおすすめです。
エラー発生時処理を終了させるサンプルコードがこちら
Function SafeExtract(strSource As String, startPos As Integer, length As Integer) As String
If startPos > Len(strSource) Then
SafeExtract = ""
Exit Function
End If
SafeExtract = Mid(strSource, startPos, length)
End Function
対象とする文字数をカウントし、関数IFを使って処理を終了させるのかを判断する
という内容です。
このようなコードを付与することで、
エラーで処理が強制的にストップするのではなく、何事もなかったかのように処理が終了する
となります。
まとめ:文字列操作は手作業ではなくVBAがおすすめ
文字列操作を手作業で処理すれば、編集ミスに繋がる、時間がかかるというデメリットがありますが、
VBAを設定しまえば一瞬で処理することが可能になります。
Left、Right、Mid、Instr関数を使いこなすことで、複雑なデータ処理も実現可能。
「」内の重要事項を切り出す、住所で郵便番号だけを取り出す、指名で苗字を切り出す、
このような処理は文字列の切り出しVBAで処理できます。
Left、Right、Mid、Instr関数を使いこなしてエクセル業務の効率をアップさせましょう。
この記事を読んで、
「VBAやってみたい!」「いろんなエクセル業務の自動化に挑戦したい!!」
と感じてくれた方はエクセルVBAの情報を定期的に配信しているメルマガへの登録を検討してみてください。
エクセル業務で苦しんだ私の経験を元に、
実務で役立つVBA情報をお届けしています。
この記事が、あなたの業務効率化への第一歩となることを願っています。
ディスカッション
コメント一覧
まだ、コメントがありません