Excelで「文字列の途中から文字を取り出したい」と思ったことはありませんか? 商品コードや住所、電話番号など、決まった位置にある情報を抜き出したい場面は意外と多いですよね。 LEFT関数やRIGHT関数では先頭や末尾しか取れず、もどかしい思いをした方もいるのではないでしょうか。
そんなときに活躍するのが MID関数 です。 開始位置と文字数を指定するだけで、文字列のどこからでも自由に切り出せます。 この記事では、MID関数の基本構文から実務で使える応用パターンまで、順を追って解説していきます。
対象バージョン: Excel 2016 / 2019 / 2021 / Microsoft 365(Windows・Mac共通)
MID関数とは?LEFT・RIGHTとどう違う?
ExcelのMID関数は、文字列の 途中から指定した文字数 を取り出す関数です。 読み方は「ミッド」で、英語の「Middle(真ん中)」が由来です。
Excelには文字を抽出する関数が3つあります。 それぞれ取り出す位置が異なるので、まずは違いを押さえておきましょう。
3つの文字抽出関数の使い分けを一覧で確認
| 関数 | 取り出す位置 | 引数 | 使いどころ |
|---|---|---|---|
| LEFT | 先頭(左端)から | 文字列, 文字数 | 先頭の郵便番号・年度など |
| RIGHT | 末尾(右端)から | 文字列, 文字数 | 末尾の拡張子・連番など |
| MID | 任意の位置(途中)から | 文字列, 開始位置, 文字数 | コード中央の分類番号など |
LEFT・RIGHTは「端っこ」しか取れません。 MID関数だけが「どこからでも自由に」取り出せるのがポイントです。
3つの関数の詳しい使い分けは、Excelの文字列関数まとめの記事も参考にしてみてください。
「途中から」取り出す場面の具体例
MID関数が活躍するのは、次のような場面です。
- 商品コード「ABC-001-XL」の真ん中「001」を取り出す
- 電話番号「03-1234-5678」から市内局番「1234」だけ取り出す
- 住所から都道府県を除いた部分を取り出す
- メールアドレスの@以降のドメインを取り出す
いずれも「先頭でも末尾でもない位置」からの抽出ですよね。 こうした場面ではMID関数の出番です。
MID関数の書き方(構文・引数)
基本構文と3つの必須引数
MID関数の構文は次のとおりです。
=MID(文字列, 開始位置, 文字数)
3つの引数はすべて必須です。 それぞれの役割を表で確認しましょう。
| 引数 | 必須 | 説明 | 指定例 |
|---|---|---|---|
| 文字列 | 必須 | 抽出元の文字列またはセル参照 | A1, “ABCDE” |
| 開始位置 | 必須 | 何文字目から取り出すか(1始まり) | 3 → 3文字目から |
| 文字数 | 必須 | 何文字分取り出すか | 2 → 2文字分 |
開始位置の数え方
開始位置は 1から数えます。 0ではないので注意してください。
たとえば「ABCDE」の3文字目から2文字取り出す場合はこうなります。
=MID("ABCDE", 3, 2)
→ 結果: "CD"
A=1、B=2、C=3…と数えて、3文字目の「C」から2文字分です。 全角文字も半角文字も、どちらも 1文字 としてカウントされます。
文字数を多めに指定したときの動作
「残り文字数より大きい値」を文字数に指定しても、エラーにはなりません。 末尾までの文字がそのまま返ります。
=MID("ABCDE", 3, 100)
→ 結果: "CDE"
この仕様を活用すると「開始位置から末尾まで全部取り出す」ことができます。 文字数にLEN関数(文字数を数える関数)を渡すのが定番テクニックです。
=MID(A1, 3, LEN(A1))
LEN(A1) は元の文字列の全文字数なので、確実に末尾まで届きますよ。
MID関数の基本的な使い方
直接値を指定して取り出す
まずは文字列を直接入力する方法です。 「Fluid Flow」の7文字目から4文字を取り出してみましょう。
=MID("Fluid Flow", 7, 4)
→ 結果: "Flow"
スペースも1文字としてカウントされます。 F=1, l=2, u=3, i=4, d=5, スペース=6, F=7 です。
セル参照で取り出す
実務ではセル参照を使うのが一般的です。 セルA1に「東京都港区芝公園」が入っている場合を考えましょう。
=MID(A1, 4, 2)
→ 結果: "港区"
4文字目の「港」から2文字分を取り出しています。
結果が文字列になる点に注意
MID関数の結果は 常に文字列 です。 たとえば数値が含まれるセルから数字を取り出しても、結果は文字列として扱われます。
セルA1に「注文番号12345」が入っている場合を見てみましょう。
=MID(A1, 5, 5)
→ 結果: "12345"(見た目は数字だが文字列)
この「12345」はセルの左寄せで表示されます。 SUM関数などの計算に使いたい場合は、VALUE関数(文字列を数値に変換する関数)で変換が必要です。 詳しくは後半の「よくあるエラーと対処法」でも触れますよ。
MID関数の実務活用パターン
ここからは実務でよくある活用パターンを紹介します。 FIND関数との組み合わせが登場しますが、やっていることはシンプルなので安心してください。
パターン1: 商品コードの分類番号を取り出す
商品コード「PRD-001-BK」から、真ん中の分類番号「001」を取り出すケースです。 ハイフンの位置が固定なので、開始位置と文字数を直接指定できます。
=MID(A1, 5, 3)
→ 結果: "001"
P=1, R=2, D=3, -=4, 0=5 なので、5文字目から3文字です。
パターン2: 電話番号の市内局番を分割する
電話番号「03-1234-5678」から市内局番「1234」を取り出します。 「03-」が3文字なので、4文字目から4文字です。
=MID(A1, 4, 4)
→ 結果: "1234"
市外局番の桁数が一定なら、この方法でスッキリ取り出せますよ。
パターン3: FIND関数と組み合わせて区切り文字の後ろを取り出す
ここからが実務で大活躍するパターンです。 たとえば「田中 太郎」からスペースの後ろ「太郎」を取り出す場合を考えましょう。
姓の長さは人によって違いますよね。 「田中」は2文字、「佐々木」は3文字です。 こうした 可変長データ にはFIND関数(検索文字の位置を返す関数)が頼りになります。
=MID(A1, FIND(" ", A1) + 1, LEN(A1))
この式を分解すると、次のとおりです。
- FIND(” “, A1) → スペースの位置を取得(「田中 太郎」なら3)
- + 1 → スペースの次の文字から開始(3+1=4文字目)
- LEN(A1) → 末尾まで確実に取り出すための大きめの数
結果は「太郎」になります。 FIND関数が区切り文字の位置を自動で見つけてくれるので、姓が何文字でも対応できますよ。
パターン4: FIND+LENで「ハイフン後ろから末尾まで」を取り出す
「受注-20240115-完了」から「完了」のようなステータス部分を取り出すケースです。 2つ目のハイフンの後ろを取得します。
ちょっとむずかしく見えますが、やっていることはシンプルです。
=MID(A1, FIND("-", A1, FIND("-", A1) + 1) + 1, LEN(A1))
ポイントは FINDの3番目の引数(開始位置) です。
- FIND(“-“, A1) → 1つ目の「-」の位置(3)
- FIND(“-“, A1, 3+1) → 4文字目以降で最初の「-」の位置(12)
- + 1 → ハイフンの次(13文字目)から末尾まで
FINDを入れ子にすると、2番目の区切り文字を見つけられます。 「何番目の区切り文字か」を変えれば、3番目・4番目にも応用できますよ。
パターン5: メールアドレスから@以降のドメインを抽出する
「tanaka@example.com」から「example.com」を取り出します。 @の位置はアドレスによって異なるので、FIND関数の出番です。
=MID(A1, FIND("@", A1) + 1, LEN(A1))
→ 結果: "example.com"
パターン3と同じ考え方ですね。 FIND関数で@の位置を特定し、その次から末尾まで取り出すだけです。
パターン6: 住所から市区町村を取り出す(都道府県の文字数が不定な場合)
住所データから都道府県を除きたい場面は多いですよね。 ただし「東京都」は3文字、「神奈川県」は4文字と長さが異なります。
この場合、MIN関数とFIND関数を組み合わせた式が便利です。
=MID(A1, MIN(FIND({"都","道","府","県"}, A1&"都道府県")) + 1, LEN(A1))
式の流れを見てみましょう。
- A1&”都道府県” → 文字列末尾に「都道府県」を付加(検索エラー回避用)
- FIND({“都”,”道”,”府”,”県”}, …) → 「都」「道」「府」「県」それぞれの位置を配列で取得
- MIN(…) → 最も小さい位置(最初に見つかったもの)を採用
- + 1 → 「都」「県」などの次の文字から開始
「東京都港区…」なら「都」が3文字目なので、4文字目以降が返ります。 「神奈川県横浜市…」なら「県」が4文字目なので、5文字目以降です。
バージョンメモ: Microsoft 365・Excel 2019以降では通常のEnterで入力できます。 Excel 2016以前をお使いの場合は Ctrl+Shift+Enter で確定してください。
なお、エラーが心配な方は IFERROR関数(エラー時に別の値を返す関数)で囲むと安心です。
よくあるエラーと対処法
MID関数を使っていて「あれ?」となるケースをまとめました。
#VALUE!が出たときのチェックポイント
#VALUE! エラーが出る原因は主に2つです。
- 開始位置に0以下の値を指定している → 開始位置は1以上にする
- 文字数にマイナスの値を指定している → 0以上にする
FIND関数と組み合わせたときに起こりやすいパターンがあります。 検索文字が見つからないとFIND関数が #VALUE! を返し、MID関数にも波及するケースです。
=IFERROR(MID(A1, FIND("@", A1) + 1, LEN(A1)), "")
IFERROR関数で囲んでおくと、エラー時に空文字を返せます。 検索文字が含まれないデータが混在する場合は、この書き方をおすすめしますよ。
空文字が返るときの原因
MID関数が空文字(””)を返すケースは2つあります。
- 開始位置が文字列の長さを超えている → 開始位置の値を確認する
- 文字数に0を指定している → 1以上に修正する
どちらもエラーにはなりません。 静かに空文字が返るので、気づきにくい点に注意してください。
数値として使いたいときはVALUE関数で変換
先ほど触れたとおり、MID関数の結果は常に文字列です。 取り出した数字で計算したい場合は、VALUE関数で数値に変換しましょう。
=VALUE(MID(A1, 5, 3))
VALUE関数で囲むだけで、数値として計算に使えるようになります。 SUM関数やIF関数で数値比較する前に変換しておくのが確実ですよ。
MID関数とMIDB関数の違い
MID関数とよく比較されるのがMIDB関数です。 両者の違いは 文字の数え方 にあります。
| 項目 | MID関数 | MIDB関数 |
|---|---|---|
| カウント基準 | 文字数(1文字=1) | バイト数(全角=2、半角=1) |
| 「Excel」の長さ | 5 | 5(すべて半角) |
| 「エクセル」の長さ | 4 | 8(すべて全角) |
| 主な用途 | 一般的な文字抽出 | 固定バイト長データの処理 |
通常の実務では MID関数を使えば問題ありません。 MIDB関数が必要になるのは、レガシーシステムから出力された固定バイト長データを扱うような、限られた場面だけです。
まとめ
この記事では、ExcelのMID関数の使い方を基本から実務活用まで解説しました。 最後にポイントを振り返りましょう。
- MID関数は =MID(文字列, 開始位置, 文字数) で途中から文字を取り出す
- 開始位置は 1から数える(0ではない)
- 文字数を多めに指定してもエラーにならず、末尾まで返る
- FIND関数と組み合わせれば、可変長データにも対応できる
- 結果は文字列になるので、数値として使うならVALUE関数で変換する
固定位置の抽出はMID関数だけで十分ですし、FIND関数と組み合わせれば応用範囲がぐっと広がります。 ぜひ実際のデータで試してみてください。
文字列操作の関数をもっと知りたい方は、Excelの文字列関数まとめもあわせてチェックしてみてくださいね。
