MID関数の使い方・読み方|文字列の途中から取り出す

執筆者:

カテゴリ:

MID関数の使い方・読み方のイメージ

文字列

MID関数の使い方・読み方

Excel関数辞典

読み方:MID は「ミッド」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)

MIDは、文字列の指定した位置から、指定した文字数だけ取り出す関数です。

使える環境Excel○Googleスプレッドシート○
このページの中身(22項目)
  1. 書式
  2. 基本の使い方
  3. 区切り文字の間を取り出す
  4. 文字数を大きめに指定してもいい
  5. 実用例
  6. 全行に適用する
  7. エラーの対処
  8. 使い分け
  9. 開始位置を計算で求めるという発想
  10. 固定長データを分解する
  11. 検索と組み合わせる定番の型
  12. 抽出のパターンが複雑なとき
  13. 固定長データを扱う実務
  14. 抽出のロジックを段階に分ける
  15. 「文字列」の関数を全体から見る
  16. 数式を書く前の手順
  17. どの関数でも共通する確認
  18. 引き継ぐときに残すこと
  19. このサイトの収録状況
  20. よくある質問
  21. まとめ
  22. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

LEFT が先頭、RIGHT が末尾なのに対し、MIDは途中の任意の位置を切り出せます。ExcelとGoogleスプレッドシートで共通です。

MID関数の使い方の記事構成図
MID関数の使い方:この記事で扱う内容

書式

=MID(文字列, 開始位置, 文字数)
引数内容
文字列対象
開始位置先頭を1として何文字目から
文字数取り出す長さ

開始位置は1から数えます。 0からではありません。

基本の使い方

A1に ABC-1234-XY が入っているとします。

=MID(A1, 5, 4)   → 1234

5文字目から4文字を取り出しています。

MID関数の使い方の要点図
MID関数の使い方

区切り文字の間を取り出す

実務ではこちらが主になります。FIND で位置を求めて計算します。

ABC-1234-XY から真ん中の 1234 を取り出す場合:

=MID(A1, FIND("-", A1) + 1, FIND("-", A1, FIND("-", A1) + 1) - FIND("-", A1) - 1)

読みにくいので分解します。

  • FIND("-", A1) … 1つ目の「-」の位置(4)
  • FIND("-", A1, 5) … 5文字目以降で「-」を探す=2つ目の位置(9)
  • 開始位置 = 4 + 1 = 5
  • 文字数 = 9 − 4 − 1 = 4

FIND の第3引数(検索開始位置)を使うのがポイントです。

とはいえ、この用途なら SPLIT か REGEXEXTRACT のほうが圧倒的に短く書けます。

=INDEX(SPLIT(A1, "-"), 1, 2)
=REGEXEXTRACT(A1, "-([^-]+)-")

MIDを長い数式で使い始めたら、他の関数への置き換えを検討してください。

文字数を大きめに指定してもいい

文字数が足りなくても、MIDはエラーになりません。残り全部を返します。

=MID(A1, 5, 999)   → 1234-XY

「ここから最後まで」を取り出したいときに便利です。RIGHT で LEN を計算するより簡単です。

実用例

生年月日の文字列から年月日を分ける

A1が 20260401 の場合:

=MID(A1, 1, 4)   → 2026
=MID(A1, 5, 2)   → 04
=MID(A1, 7, 2)   → 01

日付に変換するなら DATE と組み合わせます。

=DATE(MID(A1,1,4), MID(A1,5,2), MID(A1,7,2))

8桁の数値を日付に直す定番の書き方です。ただしA1が数値の場合は TEXT で文字列にしてから渡してください。

=DATE(MID(TEXT(A1,"00000000"),1,4), MID(TEXT(A1,"00000000"),5,2), MID(TEXT(A1,"00000000"),7,2))

商品コードの中間を取り出す

位置が固定なら、MIDが最も素直です。

=MID(A1, 4, 3)

1文字ずつ分解する

ARRAYFORMULA と ROW を組み合わせます。

=ARRAYFORMULA(MID(A1, ROW(INDIRECT("1:" & LEN(A1))), 1))

A1の文字が1文字ずつ縦に並びます。文字種の判定や、1文字ずつの変換をしたいときに使います。

全行に適用する

=ARRAYFORMULA(IF(A2:A="", "", MID(A2:A, 5, 4)))

位置が固定なら、この形が最も確実です。

エラーの対処

#VALUE! が出る

  • 開始位置に0以下を指定している(1から数える)
  • 文字数にマイナスを指定している

FIND の計算結果がマイナスになっていないか確認してください。

空文字が返る

開始位置が文字列の長さを超えています。エラーにはならず、空文字になります。気づきにくいので注意してください。

=IF(LEN(A1) < 5, "短すぎ", MID(A1, 5, 4))

長さを先に確認する書き方が安全です。

想定と違う位置で切れる

見えない文字(改行・全角スペース・タブ)が含まれています。LEN() で文字数を確認してください。見た目と合わなければ TRIM や CLEAN で整えます。

使い分け

やりたいこと使う関数
先頭からLEFT
末尾からRIGHT
位置が固定の途中MID
区切り文字で分けるSPLIT
パターンで取り出すREGEXEXTRACT

MIDが最も向いているのは、位置が完全に固定されているデータです。固定長のコード、8桁の日付、伝票番号など。可変長になったら他の関数に切り替えてください。


開始位置を計算で求めるという発想

中間から文字を取り出す関数は、開始位置と文字数の二つを指定します。両方を固定の数字で書けるのは、桁数が完全に決まっている形式だけです。それ以外では、どちらか、あるいは両方を計算で求めることになります。

たとえば「A-101-2026」のような形式から、真ん中の要素を取り出したいとします。最初の区切りの位置を求めれば、開始位置はその次です。二番目の区切りの位置を求めれば、そこまでの文字数が計算できます。二つの検索結果を組み合わせる形です。

二番目の区切りの位置を求めるには、検索の関数に開始位置を指定します。最初の区切りの位置より後ろから探すよう指定すれば、二番目が見つかります。この「開始位置を指定して検索する」という使い方を知っていると、区切りがいくつあっても対応できます。

数式は長くなりますが、構造は単純です。位置を求める部分と、切り出す部分に分けて考えてください。作業列に分ければ、途中でどこが間違っているかも分かります。


固定長データを分解する

桁位置が仕様として決まっている形式では、この関数がそのまま使えます。会計システムや基幹システムから出力されるデータには、こうした形式が今も多く残っています。

たとえば、十二桁のコードのうち、先頭二桁が地域、次の三桁が分類、残りが連番、という仕様の場合。それぞれの開始位置と文字数を指定すれば、三つの列に分解できます。

このとき、仕様書の桁位置をそのまま数式に書けるので、対応関係が明確になります。仕様が変わったときも、数字を直すだけで済みます。

注意点は、全角文字が含まれる場合です。桁数の数え方が二通りあるため、仕様がどちらを前提にしているかを確認してください。固定長のテキストファイルでは、全角を二として数える仕様が一般的です。

もうひとつ、桁が足りない行への対処です。想定より短いデータが混ざっていると、途中で切れた結果が返ります。エラーにはならないため、気づきにくい問題です。文字数を数える列を用意して、想定どおりかを確認する仕組みを入れておくと安全です。


検索と組み合わせる定番の型

区切り文字で区切られた文字列から、任意の要素を取り出す処理は、次の型で書けます。

まず、取り出したい要素の直前の区切りの位置を求めます。要素が一番目なら区切りはないので、開始位置は一です。二番目なら最初の区切りの次、三番目なら二番目の区切りの次、という具合です。

次に、その要素の直後の区切りの位置を求めます。最後の要素なら区切りがないので、文字列の末尾までになります。

この二つの位置の差から、取り出す文字数が決まります。

この型を理解しておくと、区切り文字で分割する専用の関数が使えない環境でも、必要な要素を取り出せます。また、分割の関数は結果が横方向に展開されるため、一つの要素だけが欲しい場合には扱いにくいことがあります。この型なら、必要な列だけを作れます。

とはいえ、すべての要素が必要なら、分割の関数のほうが圧倒的に簡単です。用途に応じて選んでください。→ SPLIT関数の使い方


抽出のパターンが複雑なとき

位置で切り出す方法では対応しきれない場合があります。取り出したい部分が、位置ではなくパターンで決まる場合です。

文字列の中から数字だけを取り出す。カッコで囲まれた部分だけを取り出す。メールアドレスらしき部分を取り出す。こうした要求は、位置の計算では書けません。

この場合は、正規表現を使う関数が適しています。パターンを指定して、一致する部分を取り出せます。数式は短くなり、桁数が可変でも対応できます。

一方で、正規表現は書き方を覚える必要があり、意図しない部分に一致する危険もあります。単純な位置の切り出しで足りる場面では、素直にこの関数を使うほうが安全です。

判断の目安は、取り出す部分が位置で決まるか、パターンで決まるかです。位置なら切り出しの関数、パターンなら正規表現、と考えてください。→ REGEXEXTRACT関数の使い方


固定長データを扱う実務

固定長のテキストは、基幹システムからの出力で今も広く使われています。桁位置で意味が決まる形式です。

この形式を扱うときは、仕様書が前提になります。何桁目から何桁が何を表すのか、という定義が必ずあります。仕様書がないまま推測で切り出すのは危険です。似た値が並んでいても、境界が違えばすべてがずれます。

仕様書があれば、開始位置と文字数をそのまま数式に書けます。列ごとに一つずつ作業列を作り、それぞれ切り出します。仕様書の項目名を見出しにすれば、対応関係が明確になります。

注意すべきは、桁数の数え方です。固定長の形式では、全角文字を二として数える仕様が一般的です。通常の数え方で切り出すと、全角が含まれる行だけがずれます。全角を二として数える版の関数を使う必要があります。

もうひとつ、右詰めか左詰めかも確認してください。数値項目は右詰めで、余った桁は空白かゼロで埋められます。切り出した後に、余分な空白を落とすか、先頭のゼロを扱うかを決める必要があります。

最後に、行の長さを確認する列を必ず置いてください。想定と違う長さの行が混ざっていれば、そこで切り出しが失敗しています。


抽出のロジックを段階に分ける

複雑な切り出しを一つの数式で書くと、後から読めなくなります。段階に分けるのが基本です。

第一段階として、位置を求める列を作ります。区切り文字の位置、目印となる文字の位置。これらを別の列に出しておきます。

第二段階として、その位置を使って切り出す列を作ります。第一段階の結果を参照するので、数式は短くなります。

第三段階として、切り出した結果を整形する列を作ります。空白の除去、型の変換。

この三段階に分けると、どこで間違っているかが目で確認できます。一本の数式では、結果がおかしくても原因が分かりません。

列が増えることを嫌う場合でも、開発中は段階に分けてください。動作が確認できてから、必要なら一本にまとめる。この順序であれば、まとめた数式が正しいことを確信できます。

そして、まとめる前に段階分けの版をどこかに残しておいてください。仕様が変わったときに、そこから修正するほうが早くなります。

「文字列」の関数を全体から見る

文字列は文字を加工する関数群です。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに31本あります。

記事
CHAR
CLEAN
CODE
CONCAT
CONCATENATE
EXACT
FIND
FIXED
HYPERLINK
IMAGE
JIS
LEFT
LEN
LENB
LOWER
NUMBERVALUE
PROPER
REGEXEXTRACT
REGEXMATCH
REGEXREPLACE
REPLACE
REPT
RIGHT
SEARCH
SPLIT
SUBSTITUTE
TEXT
TEXTJOIN
TRIM
UPPER
VALUE

このカテゴリで共通するつまずき

全角と半角、前後の空白、改行。この3つが原因のほとんどです。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。

どれを使うかの決め方

位置で取るのか、記号を目印に取るのかで使う関数が変わります。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。

迷ったときは

→ 全関数の一覧 に目的別の索引があります。


数式を書く前の手順

書き始める前に決めておくことがあります。ここが曖昧なまま書くと、途中で行き詰まります。

1. 出したい結果を一文で書く

「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。

2. 元データの型を確認する

全角と半角、前後の空白、改行。この3つが原因のほとんどです。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。

3. 空欄と0の扱いを決める

未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。

4. 条件の数を数える

位置で取るのか、記号を目印に取るのかで使う関数が変わります。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。

5. 共有先の環境を確認する

新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。

6. 1行だけ書いて確認する

全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。


どの関数でも共通する確認

関数を問わず、結果がずれる原因は限られています。この5つを確認すれば、大半が解決します。

参照を固定したか

下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。

範囲の行数が揃っているか

複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。

型が揃っているか

=ISNUMBER(A2)

数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。

前後に空白が入っていないか

=LEN(A2)&" / "&LEN(TRIM(A2))

数が違えば、余分な空白が入っています。見た目では判別できません。

別の方法で検算したか

同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。

最終行まで確認したか

一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。


引き継ぐときに残すこと

数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。

何を出している数式か

一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。

どの表を参照しているか

参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。

該当しないときの扱い

空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。

触ってはいけない場所

列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。

使った関数の対応環境

新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。

確定した期間は値にする

締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。

このサイトの収録状況

現在、201本の記事をカテゴリ別に整理しています。関数名が分からない場合は、カテゴリから探してください。

カテゴリ記事数
目的別51本
集計47本
文字列31本 ←この記事
日付19本
検索・参照15本
条件15本
機能12本
配列・抽出10本
関数一覧1本

探し方の順番

関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。

記事の構成

どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。


よくある質問

Q. 開始位置は一から数えますか

一から数えます。先頭の文字が一です。

Q. 文字数が足りない場合は

エラーにはならず、取れるところまでが返ります。

Q. 開始位置に零を指定すると

エラーになります。一以上を指定してください。

Q. 全角文字が正しく取れません

数え方の種類を確認してください。全角を二として数える版があります。

Q. 区切り文字の位置を求めたいのですが

検索の関数を使います。開始位置を指定すれば、二番目以降も探せます。

Q. 取り出した数字で計算できません

結果は文字列です。数値に変換する関数で包んでください。

Q. すべての要素を分けたいのですが

区切り文字で分割する関数のほうが簡単です。一度に複数のセルへ展開できます。

Q. パターンで取り出したいのですが

正規表現を使う関数が適しています。位置ではなく形で指定できます。



まとめ

  • 書式は =MID(文字列, 開始位置, 文字数)
  • 開始位置は1から数える
  • 文字数を大きめに指定すると残り全部が返る
  • 位置が固定のデータに最適。可変長なら SPLIT / REGEXEXTRACT
  • 開始位置が長さを超えると、エラーにならず空文字が返る
  • 8桁数値を日付にするなら DATE と組み合わせる

関連する関数