【関数】対象データの任意の位置から指定した数の文字列を抽出できる「MID」の使い方
AさんAさん

住所の「市区町村」以降など、特定データの途中から文字を抽出したいですが、どう作業したら効率的ですかね?

森田森田

その場合は、関数のMIDを活用すると良いですよ!
では、MIDの使い方について解説していきますね。

はじめに

この記事は関数の概要を把握していることが前提です。

参考記事

関数の概要については以下の記事をご参照ください。

元データの文字列から任意の部分のみ抽出したい場合は「MID」が有効

実務では、既存のデータと使いたいデータで粒度が合っていないケースがあります。

たとえば、住所を「都道府県」と「市区町村+番地」に分けて管理したいといったイメージです。

この解決策として、既存データの文字列から必要な部分だけ抽出した列を用意することが必要です(例:住所から「市区町村+番地」のみ抽出)。

こんな場合、関数の「MID」を使うことで、対象データの任意の位置から指定した数の文字列を自動的に抽出することが可能となります。
ちなみに、MIDは「ミッド」と呼びます。

よって、元データの文字列から任意の部分のみ抽出したい場合はMIDを使用していきましょう。

参考記事

対象データの「先頭(左)」から抽出したい場合はLEFT、対象データの「末尾(右)」から抽出したいはRIGHTを使用してください(詳細は以下の記事を参照)。


MIDの構文

MIDの構文は以下の通りです。

=MID(文字列,開始位置,文字数)
文字列の指定された位置から、指定された数の文字を返します。半角と全角の区別なく、1文字を1として処理します。

引数名 必須 データ型 説明
文字列 文字列 抽出対象のセルを指定します。
開始位置 数値 「文字列」の抽出を開始する位置を何文字目にするか指定します。
※「文字列」の先頭文字は「1
文字数 数値 「開始位置」から抽出したい文字数を指定します。

引数「開始位置」へ引数「文字列」の文字数を超える数値を指定した場合、MIDの戻り値は空白(ブランク)になります。
引数「開始位置」は「1」以上の数値を指定する必要があります(「1」未満の場合はエラー値「#VALUE!」が表示)。
引数「文字数」は「0」以上の数値を指定する必要があります(負の数はエラー値「#VALUE!」が表示)。
引数「開始位置」+「文字数」の合計値が、引数「文字列」の文字数を超える場合、引数「開始位置」から引数「文字列」の末尾までの文字がMIDの戻り値になります。
引数「文字数」を小数点まで指定した場合、整数部分で抽出されます。

【参考】MIDは「文字列操作関数」

あくまで参考情報となりますが、MIDはリボン「数式」タブの関数ライブラリの「文字列操作」に分類されています。

実際にMIDを活用する際は、以下で解説しているように直接入力で挿入していきましょう。

MIDの使用結果イメージ

MIDで対象データの任意の位置から指定した数の文字列を抽出したイメージは以下の通りです。
今回は「住所」列のデータの4文字目から「市区町村+番地」の文字列を抽出しました。

今回は引数「開始位置」はすべて4文字ですが、それ以降の文字数はバラツキがありました。

この場合、MIDの仕様を踏まえ、最大文字数のデータに合わせた引数「文字数」にすると全データの抽出がうまくいきます。
引数「開始位置」+「文字数」の合計値が、引数「文字列」の文字数を超える場合、引数「開始位置」から引数「文字列」の末尾までの文字がMIDの戻り値になります。

なお、MIDは原則一つの関数で一つのセルのみが抽出対象です。

ベースの数式をセットしたら、他のセルへペーストしましょう。

MIDの数式の挿入手順

上記の結果を得るための手順は以下の通りです。

  1. 関数を挿入するセルを選択
    ※今回はD2セル
  2. =mi」と入力
  3. サジェストから「MID」を選択し、「Tab」キーで確定
  4. 抽出対象のセルを選択
    ※今回はC2セル
  5. コンマ(,)を入力
  6. 任意の開始位置を指定
    ※今回は「4」を指定
  7. コンマ(,)を入力
  8. 任意の文字数を指定
    ※今回は「18」を指定
  9. Enter」キーで確定
  10. 1行目の数式をコピーし、以降のセルへペースト
    ※今回はD3~D11セルへペースト

手順②の際にIMEを半角英数モードにすること。
テーブルの場合、手順⑩は不要(全レコードへ数式が自動的にコピーされる)。

【応用】対象データによって引数「開始位置」・「文字数」を可変にしたい場合は

MIDの引数「開始位置」・「文字数」は固定値(定数)を指定することが基本です。

本記事では住所から「市区町村+番地」を抽出にあたり、「4」と「18」をそれぞれ指定しました。

しかし、元データの内容や抽出したいデータによって固定値だと困る場合があります。

たとえば、住所だと次のようなケースですね。

  • 4文字の都道府県(神奈川県や和歌山県など)もデータに混在している
  • 市区町村の部分のみ抽出したい

こうした場合は固定値ではなく、FINDなどの関数をネストし、目印となる文字を基準に引数「開始位置」・「文字数」のいずれか、または両方を可変にすると良いです。

MID+FINDの組み合わせテクニックについては後日別記事にする予定です。

参考記事

FINDの詳細は以下の記事をご参照ください。

【参考】半角と全角を区別して抽出したい場合は「MIDB

MIDで行う抽出は、半角(1バイト)と全角(2バイト)を区別せず、1文字を「1」として処理します。

もし、半角と全角を区別して抽出したい場合はMIDB」(ミッドビー)を使いましょう。

=MIDB(文字列,開始位置,バイト数)
文字列の任意の位置から指定されたバイト数の文字を返します。半角文字は1バイト、全角文字は2バイトとなります。

この関数の「1」は1バイトを示し、バイト数を基準に抽出することが可能です。

1文字が1バイトに変わるだけで、使い方自体はMIDと同様です。

サンプルファイルで練習しよう!

可能であれば、以下のサンプルファイルをダウンロードして、実際に操作練習をしてみてください。

サンプルファイル_ワークシート関数_MID.xlsx

※サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります。
(上記リンクから登録フォームへ遷移します)

ブックを開いたら、次の手順を実施してください。(今までの解説のまとめです)

  1. 関数を挿入するセルを選択
    ※今回はD2セル
  2. =mi」と入力
  3. サジェストから「MID」を選択し、「Tab」キーで確定
  4. 抽出対象のセルを選択
    ※今回はC2セル
  5. コンマ(,)を入力
  6. 任意の開始位置を指定
    ※今回は「4」を指定
  7. コンマ(,)を入力
  8. 任意の文字数を指定
    ※今回は「18」を指定
  9. Enter」キーで確定
  10. 1行目の数式をコピーし、以降のセルへペースト
    ※今回はD3~D11セルへペースト

本記事の解説と同じ結果になればOKです!

さいごに

いかがでしたでしょうか?

MIDはデータの抽出や分割に役立つ関数の一つです。

定期的にデータ抽出/分割の作業を行う機会があるなら、ぜひ覚えておいた方が良いですね。

なお、MID以外にもExcelでのデータ整形の各種テクニックを拙著で解説していますので、こちらも参考にしてみてください。



ご参考になれば幸いですm(_ _)m

森田森田

MIDとセットで覚えておいた方が良い関数は抽出する位置が異なるLEFTRIGHTです。
その他、臨機応変に抽出/分割したい場合はFINDLENもセットで使えるとベターですね。