MID 関数:構文、使用例、エラーの解決法
2026-10-14 更新 · 無料 · Excel と Google Sheets に対応
構文
=MID(text, start_num, num_chars)クイック回答
MID はセルのどこからでも文字を返します:=MID(A2, 4, 4) は「AE-2026-041」を「2026」にします。開始位置と文字数を渡せば、そのスライスを切り出します。開始が文字列長を超えると空文字列が返り、開始が 1 未満または文字数が負だと #VALUE! です。
構文
=MID(text, start_num, num_chars)| 引数 | 意味 |
|---|---|
| text | 切り取るテキストが入ったセルまたは文字列。必須。 |
| start_num | 何文字目から切り始めるか、1 から数える——4 なら第 4 文字から。必須、1 以上である必要があり、1 未満は #VALUE!。 |
| num_chars | その位置から何文字取るか:4 なら 4 文字。必須、0 以上である必要があり、負数は #VALUE!。 |
地域設定によっては引数がカンマではなくセミコロンで区切られます:=MID(A2; 4; 4)。カンマが小数点記号の国では標準の挙動です。
MID が数えるのは文字であり、バイトでも単語でもありません:英字・数字・空白・絵文字も 1 文字として 1 つ消費します。位置は 1 から始まり、0 文字目は存在せず、MID は決して逆方向に読みません。
基本例
=MID(A2, 4, 4)固定幅の主力:商品コード「AE-2026-041」が年「2026」を渡し、電話番号が市外局番を、請求書 ID が連番を差し出す——意味のある部分が既知の位置・既知の長さにある場面の御用達です。
=MID(A2, FIND("-", A2) + 1, FIND("-", A2, FIND("-", A2) + 1) - FIND("-", A2) - 1)動的な強化版:内側の FIND が最初のハイフンを見つけ、外側の FIND がその後から 2 つ目のハイフンを探し、MID がその間を全部切り出すので、「AE-2026-041」は「2026」、「US-Q3-772」は「Q3」になります——位置を書き下ろしません。
=MID(A2, SEARCH(" ", A2) + 1, 30)最初の空白の後を全部取る:SEARCH が空白を見つけ、+1 でそれを飛び越し、30(大きめの文字数)で安全にセルの残りを掴みます——「Jane Doe」は「Doe」、「Winston Churchill」は「Churchill」です。
=IFERROR(MID(A2, FIND("-", A2) + 1, 4), A2)本番仕様:ハイフンがない行は FIND が見つからず #VALUE! に爆発します。IFERROR で包めば、そうした行はそのまま返り、列全体が壊れません。
MID は数字を切り出してもテキストを返します:MID(123456, 2, 3) は合計できないテキスト「234」です。数値の切り出しは VALUE で包み(=VALUE(MID(A2, 4, 4)))、日付はシリアル値であることに注意——MID は表示ではなくシリアル値から切り取ります。
よくあるエラーと修正方法
| 症状 | 最も多い原因 | 修正 |
|---|---|---|
| #VALUE! | start_num が 1 未満、または num_chars が負——または埋め込んだ FIND/SEARCH が区切り文字を見つけられず、FIND 自身が先に #VALUE! を返している。 | 開始は 1 以上、文字数は 0 以上を使い、区切り文字探しを IFERROR で包んでフォールバックを置きます。 |
| 空文字列が返る | start_num がテキスト長を超えている——MID は末尾の先まで読んで何も取れない。 | テキストが十分長いか確認するか、MIN(start_num, LEN(A2)) で開始を範囲内に収めます。 |
| 切れ目が 1 文字ずれる | 区切り文字前後のオフバイワン:+1 で飛び越し、-1 で次の手前で止まる。 | 1 行で位置を追う——FIND は区切り文字の位置を返すので、FIND(...)+1 がその直後始まり、2 つの FIND の差から 1 を引いたものがスライス長です。 |
| 取り出した数字が計算できない | MID は常にテキストを返すため「007」は「007」のまま、「234」は合計されない。 | =VALUE(MID(A2, 4, 4)) で切り出した数字を本物の数値へ(先頭の 0 は消えます。そもそもテキストだったのです)。 |
| 結果が全体的にずれる | セルの先頭に見えない埋め込み空白があり、4 文字目が思った場所にない。 | 先に掃除:=MID(TRIM(A2), 4, 4)、または列全体の空白を一括削除。 |
エラーではない MID の古典的な挙動:start_num に num_chars を足したものがセル長を超えると、MID は末尾まで取って終わります——エラーも埋め草もなし。=MID("Hi", 1, 50) は「Hi」のまま。これのおかげで大きめの文字数は「ここから後ろ全部」の安全な書き方になります。
MID と LEFT・RIGHT の比較
| MID | LEFT | RIGHT | |
|---|---|---|---|
| 切り始める位置 | 指定した任意の位置 | 常に最初の文字 | 常に最後の文字 |
| 引数 | テキスト + 開始位置 + 文字数 | テキスト + 文字数 | テキスト + 文字数 |
| 最適な場面 | 中央の断片——市外局番、2 つの区切りの間 | 接頭辞、名、固定幅ヘッダー | 接尾辞、姓、拡張子 |
| 動的境界 | 両端とも動く——FIND が開始と文字数の両方に供給 | 動くのは終端だけ(FIND/SEARCH 経由) | 動くのは開始だけ(FIND/SEARCH と LEN 経由) |
MID は一般解です:=LEFT(A2, 4) は =MID(A2, 1, 4) であり、=RIGHT(A2, 4) はセルが十分長ければ =MID(A2, LEN(A2) - 3, 4) です。LEFT と RIGHT は端の便利書き方であり、断片が中央にあるときは 3 つのうち MID だけが使えます。
MID と区切り位置・TEXTBEFORE/TEXTAFTER の比較
| MID(+ FIND/SEARCH) | 区切り位置 | TEXTBEFORE / TEXTAFTER(Microsoft 365) | |
|---|---|---|---|
| 出力 | 新列に入る生きた数式、元データは無傷 | セルをその場で分割、横着すると隣の列を上書き | 生きた数式:=TEXTBEFORE(A2, "-") と =TEXTAFTER(A2, "-") |
| 区切りロジック | FIND/SEARCH と +/- オフセットで手作り | ダイアログ操作、連続区切りも目視で処理 | 各 1 引数——FIND もオフセット計算も不要 |
| 2 つの区切りの間の中央断片 | ネイティブ——MID が 2 つの FIND の間を切る | 可能だが連続分割は面倒 | TEXTAFTER(TEXTBEFORE(A2, 区切2), 区切1) を重ねる——読めるが関数 2 つ |
| 利用可能 | 全 Excel バージョンと Google Sheets | 全 Excel バージョン | Excel 365 / 2021 以降のみ |
寿命で選ぶ:繰り返すインポートや更新に耐える解析には MID 数式、完成した表の一回限りの整形には区切り位置、Excel が新しく断片が単一の区切りの片側に寄っているなら TEXTBEFORE/TEXTAFTER です。
Google Sheets での MID
- 構文も既定値も同一——上の数式はそのまま Sheets に貼れます。
- カンマ小数点地域ではセミコロン:=MID(A2; 4; 4)、Excel と同じです。
- FIND は大文字小文字を区別、SEARCH は区別せずワイルドカード対応——コンビの挙動も同じ。
- パターンで中央断片を取るなら REGEXEXTRACT があり、FIND の入れ子なしで「2 つのハイフンの間」を一発で抜けます。
制限と上級テクニック
- 1 回の呼び出しで 1 カット:コードを 3 分割するなら 3 列——LEFT・MID・RIGHT を並べるのが古典的な解析レイアウト。
- FIND と SEARCH は意図的に選ぶ:空白やハイフンのように大小を問わない区切りは SEARCH、「a」と「A」を別物にするなら FIND。
- 区切り駆動の抽出には IFERROR を必ず巻く——区切りが欠けた 1 行から #VALUE! が列全体へ広がります。
- 切った後の数字はテキストのまま:=VALUE(MID(A2, 4, 4)) が計算できる数値への戻り道。
- 大きめの num_chars はバグではなく機能:=MID(A2, SEARCH(" ", A2) + 1, 999) が長さを測らずに「最初の空白の後全部」を安全に取ります。
MID を解析ラインの中央の駅として扱う:TRIM で詰め物を落とし、SEARCH で第 1 区切りを見つけ、入れ子の SEARCH で第 2 を見つけ、MID でその間を切り、結果が数値なら VALUE で変換。各段を独立した列にしておけば、来月インポート書式が変わっても直す数式は 1 つです。
関連ツール
関連関数
よくある質問
MID は Excel で何をしますか?
セルのどこからでも文字のスライスを返します:=MID(A2, 4, 4) は第 4 文字から 4 文字を取ります。LEFT や RIGHT と違い、MID は開始位置と文字数の両方が必要なので、中央の断片を切り出せます。
MID で 2 つのハイフンの間のテキストを取るには?
両方の区切りを見つけて間を切ります:=MID(A2, FIND("-", A2) + 1, FIND("-", A2, FIND("-", A2) + 1) - FIND("-", A2) - 1)。内側の FIND が第 1 ハイフン、外側が第 2 を見つけ、差から 1 を引いたものがスライス長です。
MID が #VALUE! を返すのはなぜ?
start_num が 1 未満か、num_chars が負か、埋め込んだ FIND/SEARCH が区切りを見つけられないか——FIND は未発見で #VALUE! を返し、MID がそれを継承します。開始は 1 以上、文字数は 0 以上にし、区切り探しを IFERROR で包みます。
start_num がテキスト長を超えるとどうなる?
MID は空文字列を返します——末尾の先まで読んで何も取れません。=MID("Hi", 10, 4) は「」です。これは「接尾辞があれば取る、なければ空白」のロジックに便利ですが、エラーを期待する人は驚きます。
MID と LEFT・RIGHT の違いは?
MID は指定した位置から始まり開始位置と文字数が要ります。LEFT は常に第 1 文字からで文字数だけ、RIGHT は常に末尾からで文字数だけ必要です。MID は一般解——LEFT と RIGHT は端の便利書き方です。
MID で取り出した数字が計算できないのはなぜ?
MID はテキストを返すので、その「234」は値ではなくラベルです。=VALUE(MID(A2, 4, 4)) で変換を——ただし先頭の 0 は本物の数値では消えます。テキストとしてしか存在しなかったのです。
MID は Google Sheets で使えますか?
使えます——名前・引数・FIND/SEARCH の組み合わせ・カンマ小数点地域のセミコロン、すべて同じ。Sheets には中央断片のパターン抽出用 REGEXEXTRACT もあります。
自分のファイルで試す準備はできましたか?
Excelのテキストを列に分割を開く — 無料