【Excel VBA】文字列の切り出し方法総まとめ!Left/Right/Mid使用!

【Excel VBA】文字列の切り出し方法総まとめ!Left/Right/Mid使用!
Excelで文字列の一部だけを切り出したいときはないでしょうか。

けど、そんな中で悩むことは、

・LEFT・RIGHT・MIDの使い分けがわからない
・区切り文字が入ったコードから必要な部分だけ取り出せない
・元データの文字数がバラバラで、位置を指定するとズレてしまう

ですよね。

今回はそんなお悩みを解決する

・Excelで文字列を切り出す方法 総まとめ(LEFT・RIGHT・MID・LEN・SEARCH・VBA)

についてまとめます!

完成イメージ

文字列の切り出しは、「左から◯文字」「右から◯文字」「何文字目から◯文字」の3つを押さえると、ほとんどの場面に対応できます。
今回は
・LEFT/RIGHT/MID/LEN/SEARCHを使った切り出しと、VBAでの一括処理
をゴールにします。
コードの先頭、末尾の連番、区切りの後ろ…といった取り出しが、数式だけで自在にできるようになります。
完成イメージ
上の画像が完成形です。元の文字列から、左・右・途中・区切りの後ろと、それぞれ必要な部分が取り出せています。

なお、区切り文字で切り出すコツと、うまくいかないときの対処法(トラブルシュート)もあわせてご紹介します。

STEP1. 元データを用意する

まずは切り出したい文字列の一覧を用意します。
今回は、コード・氏名・住所が混在した10件のデータを用意しました。
A列が元の文字列で、B列〜G列はこれから数式で埋めていきます。
氏名は、このシステムでは「姓-名」の形式で登録されています。
どの行にも区切り文字として「-(ハイフン)」が入っているのがポイントです。
切り出す前の元データ

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。

元の文字列 LEFT(左から2文字) RIGHT(右から4文字) MID(4文字目から4文字) MID+SEARCH(-の後ろ4文字) MID+LEN(4文字目から最後) MID+SEARCH(2つ目の-)
AS-2026-0821
山田-太郎
東京都新宿区西新宿2-8-1
BP-2026-0512
鈴木-花子
大阪府大阪市北区梅田1-1-3
CD-2026-1003
佐藤-健
福岡県福岡市博多区博多駅前3-2-1
DE-2026-0728

※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。

STEP2. LEFT関数で左から切り出す

まずは、文字列の左端から数文字を取り出してみましょう。
左から切り出すには LEFT関数 を使います。
B2セルを選び、次の数式を入力します。

=LEFT(A2,2)

「A2の文字列の左から2文字」を取り出す、という意味です。
「AS-2026-0821」なら AS が返ります。
あとはB11セルまで下にコピーすれば、全件の左2文字がまとめて取り出せます。
コピーするだけで10件分が一度に終わるのでカンタンですね。
LEFT関数で左から2文字を取り出した結果

数式はどのセルに入れる?

B2セルを選んで、数式バーに =LEFT(A2,2) と入力するだけです。
実際の入力画面がこちらです。
入力中は引数のヒントが出るので、順番を確認しながら進められます。
LEFT関数の入力画面

STEP3. RIGHT関数で右から切り出す

つぎは、右端から数文字を取り出します。
右から切り出すには RIGHT関数 を使います。
C2セルに次の数式を入力し、C11セルまでコピーします。

=RIGHT(A2,4)

「A2の右から4文字」を取り出す指定です。
「AS-2026-0821」なら末尾の 0821 が返ります。
LEFTが左端、RIGHTが右端と、向きが違うだけなので分かりやすいですね。

STEP4. MID関数で途中から切り出す

つぎは、文字列の途中から取り出します。
途中から切り出すには MID関数 を使います。
MIDは「何文字目から何文字分」と、開始位置と文字数の2つを指定します。
D2セルに次の数式を入力し、D11セルまでコピーします。

=MID(A2,4,4)

「A2の4文字目から4文字分」を取り出す指定です。
「AS-2026-0821」なら4文字目から4文字なので 2026 が返ります。
上の画像では、C列(RIGHT)とD列(MID)が埋まっています。
RIGHT関数とMID関数の結果

STEP5. SEARCH関数で区切り文字の後ろを切り出す

ここまでは「何文字目」と位置で指定しました。
ですが、コードの先頭部分の長さが行ごとに違うと、位置指定ではズレてしまいます。
そこで便利なのが、区切り文字(今回は「-」)の位置を調べて切り出す方法です。
区切り文字の位置は SEARCH関数 で調べられます。
E2セルに次の数式を入力し、E11セルまでコピーします。

=MID(A2,SEARCH("-",A2)+1,4)

SEARCH(“-“,A2) で「-」が何文字目かを調べ、その1つ後ろから4文字を取り出しています。
「AS-2026-0821」なら「-」は3文字目なので、4文字目から4文字で 2026 が返ります。
先頭が「AS」でも「ABCD」でも、区切りを目印にするのでズレません。
SEARCH関数で区切りの後ろを取り出した結果

SEARCH+MIDの数式はどう入れる?

E2セルを選び、数式バーに =MID(A2,SEARCH(“-“,A2)+1,4) と入力します。
実際の入力画面がこちらです。
SEARCHの結果に+1して、区切り文字の次の位置から取り出すのがポイントです。
SEARCHとMIDの入力画面

STEP6. LEN関数と組み合わせて「後ろから全部」を取り出す

「◯文字目から最後まで」のように、文字数が決まっていない部分を取りたいこともあります。
そんなときは LEN関数 で全体の文字数を調べ、それを文字数に使います。
F2セルに次の数式を入力し、F11セルまでコピーします。

=MID(A2,4,LEN(A2))

LEN(A2) はA2の文字数を返します。
「4文字目から、文字数分」と指定すると、結果的に4文字目から最後までを取り出せます。
「AS-2026-0821」なら 2026-0821 が返ります。
文字数を数えなくても、LENに任せれば長さが違っても最後まで取れるのでカンタンですね。
LEN関数で後ろから全部を取り出した結果

STEP7. 2つ目の区切りを使って切り出す

「AS-2026-0821」のように区切りが2つある場合、2つ目の「-」の後ろだけを取りたいこともあります。
SEARCH関数は、何も指定しないと最初に見つかった位置しか返しません。
2つ目を探すには、SEARCHの3つ目の引数に開始位置を指定します。
G2セルに次の数式を入力し、G11セルまでコピーします。

=IFERROR(MID(A2,SEARCH("-",A2,SEARCH("-",A2)+1)+1,4),"")

内側の SEARCH(“-“,A2)+1 で「1つ目の-の次の位置」を求め、そこから探し直しています。
こうすると2つ目の「-」の位置が分かり、その後ろの 0821 だけを取り出せます。
区切りが1つしかない行はエラーになるため、IFERRORで空欄にしています。
2つ目の区切りで取り出した結果

5つの切り出し方の比較

やりたいこと別に、使う数式を表にまとめました。
「どこを基準に取りたいか」で選ぶと迷いません。

方法 数式・コード 取り出せるもの こんなときに
LEFT =LEFT(A2,2) 左から2文字 先頭の分類コードを取りたい
RIGHT =RIGHT(A2,4) 右から4文字 末尾の連番を取りたい
MID =MID(A2,4,4) 4文字目から4文字 位置で決まる一部分を取りたい
SEARCH併用 =MID(A2,SEARCH(“-“,A2)+1,4) 区切りの後ろ4文字 区切り文字が入ったコードから取りたい
VBA Left/Right/Mid/InStr まとめて一括処理 件数が多いときや定期的な作業に向く
POINT

左端なら LEFT、右端なら RIGHT、途中なら MID が基本です。
位置がバラつくコードは、SEARCHで区切り文字を探すのがいちばん確実。
件数が多く、毎回同じ切り出しをするなら VBA で一括処理するとラクですよ。

VBAでLeft・Right・Mid・InStrを使って一括処理する

件数が多く、毎回同じ切り出しをするなら、VBAで一括処理するのがもっともラクです。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。

Sub CutStrings()
    Dim r As Long, s As String
    For r = 2 To 11
        s = Cells(r, 1).Value                       ' A列の元の文字列
        Cells(r, 2).Value = Left(s, 2)              ' 左から2文字
        Cells(r, 3).Value = Right(s, 4)             ' 右から4文字
        Cells(r, 4).Value = Mid(s, 4, 4)            ' 4文字目から4文字
        If InStr(s, "-") > 0 Then                   ' 「-」の位置を調べる
            Cells(r, 5).Value = Mid(s, InStr(s, "-") + 1, 4)
        End If
    Next r
End Sub

実行すると、B列〜E列が一瞬で埋まります。
VBAの Left・Right・Mid関数 は、ワークシート関数のLEFT・RIGHT・MIDと同じ役割です。
区切り文字の位置は、SEARCHの代わりに InStr関数 で調べます。

タカヒロ

タカヒロ
VBAの Left/Right/Mid は、ExcelのLEFT/RIGHT/MIDと使い方がそっくりです。
「InStr(s, “-“)」はSEARCHと同じ「区切り文字の位置を調べる」役割ですね。
数式を何十行もコピーする手間がなくなるので、決まった切り出しはVBAに任せましょう。

うまくいかないときの対処法(トラブルシュート)

実際に試すと、思ったようにいかないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。

症状 原因 対処
位置がズレて違う文字が取れる LEFTやMIDは「文字数・位置」で指定するため、桁数が行ごとに違うとズレる 区切り文字があるなら =MID(A2,SEARCH(“-“,A2)+1,4) にする
全角と半角で数え方が心配 LENやLEFTは見た目の幅ではなく文字数で数える 「東」も「A」も1文字。全角・半角とも1文字として数えられる
先頭の「0」が消える 切り出した結果が数値として扱われる(「0821」→「821」) セルを文字列にする/=TEXT(MID(…),”0000″) で桁を揃える
#VALUE! になる 区切り文字がその行に無い/MIDの開始位置が0以下になっている =IFERROR(MID(…),””) で囲む/SEARCHの位置に+1して開始位置を1以上にする

関数の説明

今回使う5つの関数の概要です。
どれも文字列の切り出しでよく使うので、違いを押さえておきましょう。

LEFT関数(レフト)

書式 =LEFT(文字列, [文字数])
できること 文字列の左端から指定した文字数分を取り出します。
戻り値 取り出した文字列
こんなときに 先頭の分類コードなど、左から決まった数だけ取りたいとき。
注意 文字数を省略すると1文字だけ返ります。全角も半角も1文字として数えます。
=LEFT(A2,2)

RIGHT関数(ライト)

書式 =RIGHT(文字列, [文字数])
できること 文字列の右端から指定した文字数分を取り出します。
戻り値 取り出した文字列
こんなときに 末尾の連番など、右から決まった数だけ取りたいとき。
注意 LEFTと左右が逆なだけです。=RIGHT(A2,LEN(A2)-3) とすれば「左3文字の削除」もできます。
=RIGHT(A2,4)

MID関数(ミッド)

書式 =MID(文字列, 開始位置, 文字数)
できること 文字列の途中の位置から、指定した文字数分を取り出します。
戻り値 取り出した文字列
こんなときに 「何文字目から何文字」と位置で指定したいとき。SEARCHと組み合わせると区切り基準でも使えます。
注意 開始位置に0以下を指定すると #VALUE! になります。LEN(A2) を渡すと「最後まで」の意味になります。
=MID(A2,4,4)

LEN関数(レン)

書式 =LEN(文字列)
できること 文字列の文字数を数えます。
戻り値 文字数(数値)
こんなときに =MID(A2,4,LEN(A2)) のように、長さが決まっていない部分を「最後まで」取りたいとき。
注意 全角も半角も1文字として数えます。スペースも1文字に含まれます。
=MID(A2,4,LEN(A2))

SEARCH関数(サーチ)

書式 =SEARCH(検索文字列, 対象文字列, [開始位置])
できること 指定した文字が何文字目にあるかを返します。
戻り値 位置(数値)
こんなときに 「-」などの区切り文字の位置を知りたいとき。開始位置を指定すると2つ目以降も探せます。
注意 大文字と小文字を区別しません。見つからないと #VALUE! になります。似たFIND関数は区別します。
=MID(A2,SEARCH("-",A2)+1,4)

完成

元の文字列から、左・右・途中・区切りの後ろ…と、必要な部分をきれいに取り出せました。
思ったとおりに動きましたか?
B列〜G列はすべて数式なので、元の文字列を書き換えれば結果も自動で変わります。
手作業での切り貼りから卒業すると、データ整理がぐっとラクになります。
文字列を切り出した完成表

さいごに

いかがでしょうか。

今回は、

・Excelで文字列を切り出す方法 総まとめ(LEFT・RIGHT・MID・LEN・SEARCH・VBA)

についてまとめました。

ポイントは、左端はLEFT、右端はRIGHT、途中はMIDの3つを基本にすることです。
区切り文字があるコードは、SEARCHと組み合わせるとズレずに取り出せます。
件数が多いときは、VBAのLeft・Right・Mid・InStrで一括処理するのがおすすめです。
まずは今回のサンプル表で、ぜひ一度試してみてください。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。

ぜひ試してみてください。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image