タグ: MID

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

    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引数(検索開始位置)を使うのがポイントです。

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

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

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

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

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

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

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

    実用例

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

    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文字ずつ分解する

    ARRAYFORMULAROW を組み合わせます。

    =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() で文字数を確認してください。見た目と合わなければ TRIMCLEAN で整えます。

    使い分け

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

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

    まとめ

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

    関連する関数