🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel LEFT・RIGHT・MID — 位置で文字を取り出す(そして最大の弱点)

|

Excel LEFT・RIGHT・MID — 位置で文字を取り出す(そして最大の弱点)

要点LEFTRIGHTMID は文字列を位置で切る3本の物差しです。 LEFT(text, n) は先頭から n 文字、RIGHT(text, n) は末尾から n 文字、 MID(text, start, n)start の位置から n 文字を取り出します。誰もが 必ずつまずく点が2つあります。1つは、結果が常にテキストになること。 LEFT(A2,4)"2026" を取り出しても、VALUE() で包むまでは SUM も 数値としての比較もできません。もう1つは、位置のハードコードは脆いこと。 コードの長さが変わった瞬間、切り出し位置がずれてしまいます。MID0 ではなく 1 から数えます。すべての Excel バージョンで動作します。

=LEFT("INV-2026-0042", 3)      ' -> "INV"
=RIGHT("INV-2026-0042", 4)     ' -> "0042"
=MID("INV-2026-0042", 5, 4)    ' -> "2026"

どんなシートでも、いずれ大きな文字列の一部を取り出す必要が出てきます。請求書 番号から年を、電話番号から市外局番を、氏名から名前を。LEFTRIGHTMID はそれを実現する最も古く、最も移植性の高い手段であり、その限界にもかかわらず ではなく、限界があるからこそ深く理解する価値があります。

この記事で学べること

  • 抽出のたびに最初に問うべきこと。私は位置で切っているのか、それとも 内容で切っているのか?
  • なぜ MID は1始まりなのか、そして LEFT/RIGHT/MID が同じ文字列をどう 分け合うのか
  • 取り出したテキストはなぜテキストなのか — そして計算を生かし続ける VALUE() という対処法
  • 位置のハードコードがなぜシートの中で最も壊れやすい一行なのか
  • いつ手を止めて FINDTEXTSPLIT・Power Query に切り替えるべきか

考え方の軸: 同じ文字列に置いた3本の物差し

文字列 INV-2026-0042 の下に、位置を1から番号付けした物差しを置いた様子を 思い浮かべてください。LEFT は左端から内側へ読み、RIGHT は右端から内側へ 読み、MID は指定した位置から右へ読みます。検索もせず、データを理解もせず、 ただ文字を数えて切るだけです。

'  位置:      1 2 3 4 5 6 7 8 9 ...
'  文字列:    I N V - 2 0 2 6 - 0 0 4 2
=LEFT(A2, 3)        ' "INV"  — 先頭3文字
=MID(A2, 5, 4)      ' "2026" — 5文字目から4文字
=RIGHT(A2, 4)       ' "0042" — 末尾4文字

これがすべてです。強力さも危うさも、同じ事実から生まれます。すなわち あなたは正確な位置に賭けているということです。位置が保証されているとき — 固定幅のコード、常に2文字の国コード接頭辞 — これらの関数は完璧です。そうで ないとき、あなたは砂の上に家を建てています(詳しくは後述します)。

すべてを解き明かす規則: 結果は常にテキスト

これは「取り出した数値がなぜ合計されないのか」とフォーラムに人を駆り立てる 落とし穴です。LEFTRIGHTMID は、すべての文字が数字であっても 常にテキストを返しますLEFT("2026-04", 4) が返すのは数値 2026 では なくテキスト "2026" です。だから SUM>MIN・グラフの軸はどれも、 それをラベルとして扱います。

明示的に数値へ戻しましょう。

=VALUE(LEFT(A2, 4))     ' テキスト "2026" -> 数値 2026
=--LEFT(A2, 4)          ' 同じこと。二重マイナスを使う方法

逆もまた知っておく価値があります。出力がテキストなので、先頭のゼロが残ります。 RIGHT("0042", 4) は 42 に潰れず "0042" を保ちます。これは郵便番号・口座 番号・SKU にはまさに望むとおりの挙動であり、実際に計算が必要なときには VALUE()打ち消さなければならない挙動でもあります。

MID は1から数え、num_chars は寛容

MID(text, start_num, num_chars)1始まりです。MID("Excel", 1, 2)"xc" ではなく "Ex" です。ここでの1つずれは MID で最もよくある間違いです。 切り出しが1文字ずれていたら、他の言語の0始まりの数え方を前提にしていないか 確認してください。

LEFT/RIGHT/MID がエラーで止まらないよう、2つの小さな救いがあります。

  • LEFT/RIGHTnum_chars を省略すると、既定で 1 になります。
  • 存在する文字数より多く要求すると、エラーにならず文字列の残り全部が 返ります。RIGHT("AB", 10)#VALUE! ではなく "AB" を返します。

つまりこれらの関数がクラッシュすることはまれです。間違った切り出しを返して 静かに失敗します。そちらの方が厄介です。それこそが本当のリスクであり、最大の 弱点へとまっすぐつながっています。

最大の弱点: 位置のハードコードは脆い

末尾4桁を取るための =RIGHT(A2, 4) は見事に機能します — 5桁の接尾辞を持つ レコードが届くまでは。そして今や、列のすべての値から1桁を静かに落とし続けて います。手で打ち込んだ位置は、データが想定どおりの形を保っている間だけ 正しいままです。 現実のデータはそうではありません。

頑健なパターンは、より長い MID ではありません。位置で切るのをやめて、 内容で切り始めることです。区切り文字を見つけ、それを基準に切り出します。

' 脆い: 名前が常に "First Last" で、空白が6文字目にあると仮定している
=LEFT(A2, 5)

' 頑健: 最初の空白が実際にある場所で切る
=LEFT(A2, FIND(" ", A2) - 1)        ' 最初の単語(長さ不問)
=MID(A2, FIND("@", A2) + 1, 99)     ' メールの @ 以降すべて

この FIND(" ", A2) が要です。LEFT/MID/RIGHT は「ここの文字をくれ」と 答え、FINDSEARCH は「切るべき目印は どこにあるのか?」と答えます。組み合わせれば、脆い固定位置の切り出しが、 データに追従するものへと変わります。次は FIND を学んでください。この3つの 関数を単に便利なだけでなく、信頼できるものにしてくれるのがそれです。

判断のポイント: いつ位置を使い、いつ使わないか

位置が本当に固定されているとき — 3文字の通貨コード、固定幅のレガシー エクスポート、州略称の先頭2文字 — は素の LEFT/RIGHT/MID を使います。 切る位置が文字列の内容に依存した瞬間に、FIND/SEARCH と組み合わせます。

そして、いつ完全に手放すべきかも知っておきましょう。区切り文字で文字列を割る ためだけに LEFT/MID/RIGHTFIND を3段に入れ子にしているなら、それは TEXTSPLIT(Excel 365)の出番という合図 です。これは読みやすい1つの数式で区切り文字を使って分割します。大きな インポートの一度きりのクリーンアップなら、脆い数式の列より 区切り位置指定 ウィザード や Power Query の方が軽量です。LEFT/MID/RIGHT はメスです。 精密ですが、あなたの狙いの精度以上には正確になりません。

ExcelMaster はどう役立つか

抽出で難しいのは関数そのものではなく、位置を正しく定め、それを頑健に 保つことです。ExcelMaster「請求書番号から年を、メールアドレスから ドメインを取り出して」 といった平易な日本語の依頼を受け取り、正しい FIND アンカー、結果を数値にする必要があるときの VALUE() ラップ、そして次の変則的 な行で固定位置が壊れる場合の注記を添えて、数式を書きます。何を取り出すかを 説明すれば、文字数の数え方は任せられます。

よくある質問

LEFT、RIGHT、MID の違いは何ですか?

LEFT(text, n) は先頭から n 文字、RIGHT(text, n) は末尾から n 文字、 MID(text, start, n)start の位置から始まる n 文字を返します。LEFT と RIGHT は端から切り、MID は指定した任意の場所から切ります。

取り出した数値がなぜ合計されないのですか?

LEFTRIGHTMID は数値に見えても常にテキストを返すからです。結果を VALUE() で包むか(=VALUE(LEFT(A2,4)))、二重マイナスを前に付けて (=--LEFT(A2,4))本物の数値に変換してください。

MID は0始まりですか、1始まりですか?

1始まりです。MID("Excel", 1, 2)"Ex" を返します。最初の文字は位置0では なく位置1です。他の言語に慣れたプログラマーがよく起こす1つずれの原因です。

特定の文字までのテキストを取り出すには?

LEFTFIND と組み合わせます。=LEFT(A2, FIND(" ", A2) - 1) は最初の空白 より前のすべてを返します。これは文字の実際の位置に追従するため、長さの ハードコードよりはるかに頑健です。

文字列より多い文字数を MID に要求するとどうなりますか?

何も壊れません。MID(および RIGHT/LEFT)は存在する分だけを返します。 RIGHT("AB", 10) はエラーではなく "AB" を返します。便利ですが、間違った 長さが警告なしに静かに失敗することも意味します。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-06-29。

関連ガイド: Excel FIND・SEARCH · Excel SUBSTITUTE・REPLACE · Excel TEXTSPLIT · Excel TEXTJOIN