MIDは、文字列の指定した位置から、指定した文字数だけ取り出す関数です。
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桁の日付、伝票番号など。可変長になったら他の関数に切り替えてください。
まとめ
- – 書式は
=MID(文字列, 開始位置, 文字数) - – 開始位置は1から数える
- – 文字数を大きめに指定すると残り全部が返る
- – 位置が固定のデータに最適。可変長なら SPLIT / REGEXEXTRACT
- – 開始位置が長さを超えると、エラーにならず空文字が返る
- – 8桁数値を日付にするなら
DATEと組み合わせる
関連する関数
- – LEFT — 先頭から取り出す
- – RIGHT — 末尾から取り出す
- – SPLIT — 区切り文字で分割する
- – REGEXEXTRACT — 正規表現で取り出す
- – 関数一覧に戻る