- 作成日 : 2025年8月25日
MIDB関数の使い方:文字列抽出を効率的に行う方法
MIDB関数は、Excelで文字列の中から指定した位置にある文字を抽出する関数です。日本語などの全角文字を正確に扱うことができ、データ整理や文字列の処理に役立ちます。
本記事では、MIDB関数の基本的な使い方から実践的な応用方法、よくあるエラーの対処法まで詳しく解説します。
目次
MIDB関数とは
MIDB関数は「Mid Byte」の略で、文字列の指定した位置から指定した長さ分の文字を抽出する関数です。通常のMID関数と異なる点は、全角文字(日本語、中国語、韓国語など)を2バイト、半角文字を1バイトとして計算することです。
この特性により、日本語を含む文字列を扱う際に、より正確な文字抽出が可能になります。特にデータベースから取得した情報や、外部システムとの連携において、文字コードを考慮した処理が求められる場面でも対応しやすくなります。
MIDB関数の基本構文
=MIDB(文字列, 開始位置, 文字数)
- 文字列:抽出元となるテキストまたはセル参照
- 開始位置:抽出を開始する位置(バイト単位)
- 文字数:抽出する文字の長さ(バイト単位)
MIDB関数の基本的な使い方
半角文字の抽出
半角文字のみを扱う場合、MIDB関数とMID関数の動作は同じになります。
例: セルA1に「Excel2024」が入力されている場合
=MIDB(A1, 1, 5)
結果:「Excel」
この場合、開始位置1から5バイト分を抽出するため、半角文字5文字の「Excel」が取得されます。
全角文字の抽出
全角文字を含む文字列では、1文字が2バイトとして計算されます。
例: セルA1に「エクセル関数」が入力されている場合
=MIDB(A1, 1, 8)
結果:「エクセル」
全角文字の「エクセル」は4文字で、バイト数では8バイト(4文字×2バイト)となるため、8を指定します。
全角・半角混在文字列の処理
実際のデータでは、全角文字と半角文字が混在することが多くあります。
例: セルA1に「商品A001」が入力されている場合
=MIDB(A1, 1, 4)
結果:「商品」
「商品」は全角2文字で4バイト、「A001」は半角4文字で4バイトです。開始位置1から4バイトを抽出すると、全角文字の「商品」が取得されます。
MIDB関数の実用的な利用シーン
住所の分割処理
住所データを都道府県、市区町村、番地に分割する際に活用できます。
例:住所「東京都新宿区西新宿1-1-1」を分割
都道府県や市区町村は、末尾の文字(都/道/府/県、 市/区/町/村)の位置を求めてからMIDBで抽出すると汎用的に対応できます。
都道府県の抽出(汎用)
=MIDB(A1,1,
IFERROR(FINDB(“県”,A1),
IFERROR(FINDB(“府”,A1),
IFERROR(FINDB(“都”,A1), FINDB(“道”,A1)))) + 1)
(例「東京都新宿区西新宿1-1-1」→「東京都」)
市区町村の抽出(汎用)
=LET(t, A1,
p, IFERROR(FINDB(“県”,t), IFERROR(FINDB(“府”,t), IFERROR(FINDB(“都”,t), FINDB(“道”,t)))) + 1,
s, p + 1,
e, IFERROR(FINDB(“市”,t,s), IFERROR(FINDB(“区”,t,s), IFERROR(FINDB(“町”,t,s), FINDB(“村”,t,s)))),
MIDB(t, s, e – s + 2))
(例「東京都新宿区西新宿1-1-1」→「新宿区」)
※政令指定都市で「市に続いて区まで含めたい」場合は、上式のeを「区」があればその位置に更新する分岐を追加してください。
このように段階的に文字列を分割することで、住所の各要素を個別のセルに振り分けることができます。
商品コードの解析
商品コードから特定情報を抽出する処理にも適しています。
例:商品コード「CAT-A001-BL」から情報を抽出
カテゴリ部分の抽出:
=MIDB(A1, 1, 3)
結果:「CAT」
商品番号の抽出:
=MIDB(A1, 5, 4)
結果:「A001」
色コードの抽出:
=MIDB(A1, 10, 2)
結果:「BL」
データクレンジング
外部システムから取得したデータに含まれる不要な文字を除去する際にも使用されます。
例:データ「[重要]会議資料」から[重要]を除去
=MIDB(A1, 9, LENB(A1)-8)
この場合、「[重要]」は全角4文字=8バイトなので、9バイト目から残り(LENB(A1)-8バイト)を抽出することで、「会議資料」のみを取得できます。
MIDB関数の応用テクニック
他の関数との組み合わせ
MIDB関数は他の文字列関数と組み合わせることで、より複雑な処理が可能になります。
バイト単位で抽出(MIDB+SEARCHB)
=MIDB(A1, SEARCHB(“(”, A1)+2, SEARCHB(“)”, A1)-SEARCHB(“(”, A1)-2)
この数式は、「(」のバイト位置を求め、その2バイト後(直後)から「)」の直前までを抽出します。
文字単位で抽出(MID+SEARCH)
=MID(A1, SEARCH(“(”, A1)+1, SEARCH(“)”, A1)-SEARCH(“(”, A1)-1)
文字として扱う場合はこちらを使います。
LEN関数との組み合わせ
文字列の長さを動的に計算し、柔軟な抽出を行う方法です。
バイト単位で後半を抽出(MIDB+LENB)
=LET(b, LENB(A1), MIDB(A1, INT(b/2)+1, b-INT(b/2)))
バイト数を半分に分けて後半の“バイト列”を取得します(混在文字列では文字の途中で分割される可能性があります)。
文字単位で後半を抽出(MID+LEN)
=LET(n, LEN(A1), MID(A1, INT(n/2)+1, n-INT(n/2)))
“文字数”でちょうど半分以降を安全に取得したい場合はこちらを使います。
配列数式での活用
複数のセルに対して一度にMIDB関数を適用する場合、配列数式を使用することで効率的に処理できます。
例:A1:A10の各セルの先頭6バイト(=全角なら3文字相当)を抽出
=MIDB(A1:A10, 1, 6)
Microsoft 365/Excel 2021以降:Enterでスピル。
旧バージョン:出力範囲(例:B1:B10)を選択してから上式を入力し、Ctrl+Shift+Enterで確定。
※「最初の3文字」を取りたい場合はバイトではなく文字関数を用い、
=MID(A1:A10, 1, 3)
を使用します。
条件分岐との組み合わせ
IF関数と組み合わせることで、条件に応じて異なる抽出処理を行うことができます。
文字数で判定・抽出(10文字)
=IF(LEN(A1)>10, MID(A1, 1, 10), A1)
バイト数で判定・抽出(10バイト)
=IF(LENB(A1)>10, MIDB(A1, 1, 10), A1)
用途に応じて「文字」基準か「バイト」基準かを統一して使用してください。
MIDB関数でよくあるエラーと対策
#VALUE!エラー
このエラーは、引数に数値以外の値が指定された場合に発生します。
原因と対策:
文字列以外(数値)でもそのまま利用可能。
=MIDB(123, 1, 2) → “12”
※表示形式を固定したい場合のみTEXTを併用します。
=MIDB(TEXT(123, “000”), 1, 2) → “12”
空白セルを参照している場合:
=MIDB(A1, 1, 2) ※A1が空白 → “”(空文字)
必要に応じて表示制御をする場合:
=IF(A1=””, “”, MIDB(A1, 1, 2))
意図しない結果が表示される場合
全角文字と半角文字の混在により、想定と異なる結果になる場合があります。
問題例: 「商品ABC123」から「ABC」を抽出したい場合
=MIDB(A1, 3, 3) → “品A”(意図しない結果)
対策: 正確なバイト位置を計算します。「商品」は4バイト、「ABC」は3バイトなので:
=MIDB(A1, 5, 3) → “ABC”(正しい結果)
文字化けの発生
特定の文字コード環境で作成されたファイルを異なる環境で開いた際に、文字化けが発生することがあります。
- テキストファイル(CSV/TSV等)の入出力時に正しい文字コード(例:UTF-8、Shift-JIS)を指定する。Excelブック(.xlsx)は内部的にUnicodeのため、ブック自体の保存で文字コードを選ぶ必要はありません。(例:[データ]→[テキスト/CSVから]でエンコードを指定/[名前を付けて保存]で「CSV UTF-8(BOM付き)」を選択)
- データの入力元システムの文字コード設定を確認する
- 文字化け対策や表記ゆれの是正には次の関数を使います。
- 全角⇄半角の変換:JIS(半角→全角)、ASC(全角→半角)
- Unicodeコードポイントの取得/文字生成:UNICODE、UNICHAR(※CODE/CHARはコードページ依存で日本語には不向き)
- 不可視文字の除去:CLEANやTRIM、SUBSTITUTEの併用
例)全角スペース除去:=TRIM(SUBSTITUTE(A1, UNICHAR(12288), ” “))
パフォーマンスの問題
大量のデータに対してMIDB関数を使用する際、処理速度が低下することがあります。
- 計算モードを手動に設定し、必要な時のみ再計算を実行する
- 可能な限り参照範囲を限定する
- 複雑な数式は段階的に分割し、中間結果を別のセルに保存する
MIDB関数使用時の注意点
文字コードの理解
MIDB関数を効果的に使用するためには、文字コードの基本的な理解が必要です。日本語環境では、全角文字が2バイト、半角文字が1バイトとして扱われることを常に意識する必要があります。
他の文字列関数との使い分け
用途に応じて適切な関数を選択することが重要です。
- MID関数: 文字数ベースでの抽出(全角・半角を区別しない)
- MIDB関数: バイト数ベースでの抽出(全角・半角を区別する)
- LEFT/RIGHT関数: 文字列の先頭・末尾からの抽出
データの検証
抽出結果が期待通りであることを確認するため、定期的にサンプルデータでの検証を行うことを推奨します。特に外部データを扱う際は、データ形式の変更により予期しない結果が生じる可能性があります。
MIDB関数は文字コードを意識したデータ処理に最適
MIDB関数は、日本語を含む文字列処理において便利な機能として使われます。
基本的な文字抽出から複雑なデータ処理まで、幅広い場面で活用できます。全角文字と半角文字のバイト数の違いを理解し、他の関数と組み合わせることで、効率的なデータ処理が可能になります。エラーの原因を把握し、適切な対応を行えば、より安定した処理が可能になるでしょう。
※ 掲載している情報は記事更新時点のものです。
※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。
関連記事
REPT関数完全ガイド|文字列を繰り返す方法と実践的な活用術
REPT関数は、指定した文字列を指定回数だけ繰り返して表示するExcelの文字列関数です。データの視覚化やレポート作成、簡易的なグラフ作成など、様々な場面で活用できる便利な機能です。 本記事では、REPT関数の基本的な使い方から実践的な応用…
詳しくみるINDEX関数とは?使い方やVLOOKUP関数との違いをわかりやすく解説
INDEX関数は、Excelにおいて特定のセルの値を簡単に取得するための強力な関数です。この関数は、行番号と列番号を指定することで、データが格納されている位置を特定し、そこから直接値を引き出します。本記事では、INDEX関数の基本的な使い方…
詳しくみるVALUE関数の使い方や変換がうまくできない場合をわかりやすく解説
VALUE関数は、見た目は数字なのに、コンピュータに文字として認識されている文字列データ(例えば、日本語全角の数字など)を、計算ができる数値に変換するための便利なツールですが、実際に使用する際にはいくつかの注意点があります。データの形式や内…
詳しくみるエクセルの印刷範囲に出る青枠は何?設定・解除する方法を解説
エクセルを使用していると、印刷プレビューや印刷時に青い枠が表示されることがあります。この青枠は、印刷範囲を示す重要なサインですが、初めて見る方には何を意味するのか分かりにくいかもしれません。本記事では、エクセルの印刷範囲に出る青枠について詳…
詳しくみるExcel LOG関数とは?使い方や計算方法、自然対数・常用対数まで
ExcelのLOG関数(ログ関数)は、特定の底に対する対数を求めるための関数で、「何を何回掛ければ目的の数になるか」を効率的に導き出してくれます。常用対数(底10)や自然対数(底e)にも対応でき、データの変化率分析や指数関数的な現象の理解に…
詳しくみるFILTER関数の使い方とは?複数条件や複数範囲を指定する方法
FILTER関数は、ExcelやGoogleスプレッドシートでデータを柔軟に抽出するための強力なツールです。特に、複数の条件を設定して特定のデータを迅速にフィルタリングできる点が魅力です。この記事では、FILTER関数の基本的な使い方から、…
詳しくみる