データ操作の達人に!ExcelのMID関数の詳細な使い方ガイド

MID関数は、文字列の指定位置から指定文字数を取り出します。基本形は=MID(文字列,開始位置,文字数)で、先頭は0ではなく1です。=MID("ABC-123",5,3)なら「123」を返します。開始位置が文字列長を超えると空文字、1未満または文字数が負なら#VALUE!になります。指定文字数が末尾を超えても空白で埋めず、末尾までを返します。固定桁コードの抽出には便利ですが、区切り位置が変わるデータではFIND・SEARCHと組み合わせるか、新しいExcelのTEXTBEFORE・TEXTAFTER・TEXTSPLITを検討します。抽出結果は文字列なので、先頭ゼロを残す識別子を安易に数値化しないでください。

目次

MIDの三つの引数と1始まりの位置

=MID(A2,2,4)はA2の2文字目から4文字を返します。textが元文字列、start_numが開始位置、num_charsが取得文字数です。Excelのセル列番号やプログラミング言語の一部と違い、最初の文字は1です。0を指定すると#VALUE!になるため、位置計算で-1しすぎないようにします。

固定形式「JP-2026-001」で年だけ取り出すなら=MID(A2,4,4)です。ただし先頭へ空白が入る、国コードが三文字になるなど形式が変わると別部分を返します。固定位置を使う前にLEN、区切り位置、入力規則を確認し、形式の版を列や仕様書へ記録します。

開始位置が範囲外のときの結果

start_numが文字列長より大きい場合、MIDは#VALUE!ではなく空文字を返します。たとえば10文字の文字列へ開始位置20を指定すると””です。この空文字を「該当なし」としてよいか、位置計算ミスとして検出すべきかを決めます。開始位置が1未満なら#VALUE!です。

FINDの結果に加減算してstart_numを作る式では、区切り文字が先頭・末尾・未検出のケースを確認します。空文字が返っただけで正常終了とせず、start_num<=LEN(text)などを補助列で検査します。参照セルが空白の場合の期待結果も決めます。

文字数が末尾を超えても空白で埋めない

start_numが有効で、start_numとnum_charsの合計が文字列末尾を超える場合、MIDは存在する末尾までを返します。指定した文字数に足りない分をスペースで補いません。可変長の残り全部を取りたいときは十分大きな数を指定する例もありますが、LENから必要文字数を計算する方が意図を説明しやすくなります。

num_charsが0なら空文字、負なら#VALUE!です。FINDで二つの区切り位置を引いて文字数を作ると負数になる場合、区切り順や入力形式が壊れています。ABSで無理に正へ変えず、データ不正として分けます。

固定桁のコードを抽出する

製品コード「ABC-001-XY」の001を取り出すなら=MID(A2,5,3)です。結果は文字列の「001」であり、識別子として先頭ゼロを保持できます。支店番号、郵便番号、ロット番号など、計算しないコードは文字列のまま扱います。

抽出後をVALUEで数値化すると001は1になり、桁情報を失います。合計や大小比較へ使う数量だけを数値化し、変換できない行を検査します。コードの一部に見える数字が年や連番でも、将来文字が入る可能性を仕様で確認します。

数値や日付の表示文字を切り出す場合

MIDはテキストを切り出す関数です。数値セルや日付セルの画面表示から一部を取りたい場合、表示形式と内部値を混同しないようにします。日付の年・月・日はYEAR、MONTH、DAYを使う方が安全です。金額の桁を切り出す用途も、TEXTで意図した書式へ明示的に変換してからMIDするか、数値計算で処理します。

セルの表示が「2026年7月」でも内部値は日付シリアル値です。MIDが期待する表示文字を自動的にそのまま使うとは限りません。TEXTでロケール依存の表示を作る場合は、配布環境の言語と書式を確認します。元の数値精度や日付を文字列へ変換した後に戻す必要があるかも検討します。

FINDと組み合わせて区切り後を抽出する

A2のメールアドレスから@以降を取り出す例は=MID(A2,FIND("@",A2)+1,LEN(A2)-FIND("@",A2))です。FINDが区切り位置、+1が抽出開始、LENとの差が残り文字数です。大文字小文字を区別しない文字列検索ならSEARCHを使います。

区切りがない場合、FINDが#VALUE!になりMIDもエラーになります。@が複数ある、末尾にある、全角@である場合も検証します。抽出できたことはメールアドレスとして有効・安全である証明ではありません。外部送信やアカウント処理には正規の検証を別に行います。

二つの区切りの間を取り出す

「ABC[東京]001」から東京を取り出すには、開き括弧と閉じ括弧の位置を別々に求めます。開始位置はFIND("[",A2)+1、文字数はFIND("]",A2)-FIND("[",A2)-1です。実際の数式では同じFINDを繰り返すため、LETや補助列で位置へ名前を付けると確認しやすくなります。

閉じ括弧が先、括弧が重複、全角括弧、入れ子がある入力では単純式が壊れます。複雑な構造化データを文字列分解で処理せず、CSV、JSON、データベースなど元の構造を保った取り込み方法を使います。区切りが一種類で新しいExcelを使えるならTEXTBEFOREやTEXTAFTERも検討します。

不要な空白・改行を確認する

MIDはスペース、タブ、改行も文字として数えます。見た目の位置と結果がずれる場合、先頭空白、ノーブレークスペース、改行、全角空白を確認します。LENで文字数を比べ、数式バーや補助列で不可視文字を切り分けます。

TRIMやCLEANで整える場合、元データへ直接上書きせず補助列で結果を確認します。TRIMはすべての種類の空白を同じように除くわけではなく、住所・製品名・文章の意味ある空白まで削除すると情報が変わります。取り込み元ごとに正規化ルールを定めます。

Unicode文字とMIDB非推奨の注意

Microsoftの現行資料ではMIDBは非推奨です。MIDは文字数を基準にします。互換性バージョン2のブックではサロゲートペアを一文字として数える改善がありますが、絵文字の異体字セレクターは別文字として数えられる場合があります。人が見て一文字の記号が、数式上の文字数と同じとは限りません。

日本語氏名、多言語文字、絵文字を固定桁で分割する場合は実データで確認します。古いブックの互換性設定を変えると既存のMID結果が変わる可能性があるため、変換前後で代表値を比較します。バイト数が必要な外部仕様は、Excelの非推奨MIDBへ安易に依存せず、文字コードを明示できるデータ処理で扱います。

新しいテキスト関数と保守性

Microsoft 365や新しいExcelではTEXTBEFORE、TEXTAFTER、TEXTSPLITを使い、区切り文字を直接指定できる場合があります。固定位置をLENやFINDで計算する式より読みやすく、区切りの出現番号や未検出時の扱いを指定できる機能があります。ただし対応版を確認します。

配布先に古いExcelが含まれるならMID・FIND方式を維持するか、値として配布するかを決めます。変換時は、固定長、可変長、区切りなし、連続区切り、先頭・末尾、空白、絵文字、数値文字列を新旧式で比較します。数千行へコピーする場合はテーブルの構造化参照を使い、範囲追加と計算負荷を確認します。

確認チェックリスト

  • MIDの開始位置が1始まりであることを確認する
  • 開始位置が文字列長を超えると空文字になる点を検査する
  • num_charsが負なら#VALUE!、末尾超過なら末尾までになると理解する
  • 識別子の先頭ゼロを保持し、必要な場合だけ数値化する
  • 区切り位置はFIND・SEARCHで検査し、未検出を隠さない
  • 多言語・絵文字・古い互換性設定で文字数を実データ確認する

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次