文字列
MID関数の使い方・読み方
読み方:MID は「ミッド」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)
MIDは、文字列の指定した位置から、指定した文字数だけ取り出す関数です。
このページの中身(22項目)
この記事の書式と対応環境の出どころ(2026-08-26 確認)
- Google スプレッドシート ヘルプ:公式の書式は
MID(文字列, 開始位置, セグメントの長さ)
https://support.google.com/docs/answer/3094129 - Microsoft サポート:MID 関数
https://support.microsoft.com/ja-jp/excel/functions/mid-function
関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。
LEFT が先頭、RIGHT が末尾なのに対し、MIDは途中の任意の位置を切り出せます。ExcelとGoogleスプレッドシートで共通です。

書式
=MID(文字列, 開始位置, 文字数)
| 引数 | 内容 |
|---|---|
| 文字列 | 対象 |
| 開始位置 | 先頭を1として何文字目から |
| 文字数 | 取り出す長さ |
開始位置は1から数えます。 0からではありません。
基本の使い方
A1に ABC-1234-XY が入っているとします。
=MID(A1, 5, 4) → 1234
5文字目から4文字を取り出しています。

区切り文字の間を取り出す
実務ではこちらが主になります。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と組み合わせる
関連する関数
- LEFT — 先頭から取り出す
- RIGHT — 末尾から取り出す
- SPLIT — 区切り文字で分割する
- REGEXEXTRACT — 正規表現で取り出す
- 関数一覧に戻る