「長い文字列の中からメールアドレスだけ取り出したい」「URLからドメイン部分だけを抜き出したい」。データ整理をしていると、こんな場面に出くわしますよね。
これまでのExcelでは、LEFT・RIGHT・MID・FINDを組み合わせた長い数式を書くしかありませんでした。位置がズレるだけで壊れてしまう、あの面倒な数式ですね。
そんなときに便利なのがExcelのREGEXEXTRACT関数です。正規表現を使って、狙った文字列を一発で抜き出せますよ。
この記事では、ExcelのREGEXEXTRACT関数の使い方を基本から実務例まで解説します。キャプチャグループの使い方や姉妹関数との使い分けもまとめましたので、ぜひ参考にしてください。
ExcelのREGEXEXTRACT関数とは?
REGEXEXTRACT関数は、文字列の中から正規表現パターンに一致する部分を抜き出すExcelの関数です。読み方は「レジェックスエクストラクト」で、メールアドレスやURL、日付など狙った形式の文字列をピンポイントで取り出せます。
2024年にMicrosoft 365へ追加された新しい関数で、REGEXTEST・REGEXREPLACEとともに「正規表現3関数」と呼ばれています。姉妹関数のREGEXTESTがパターンの「判定」を担うのに対し、REGEXEXTRACTは「抽出」を担当します。
LEFT・MID・FINDを組み合わせた長い数式に悩まされてきた方には、まさに救世主のような関数ですよ。
どんなときに使う関数か
REGEXEXTRACT関数は次のようなシーンで活躍します。
- 問い合わせ本文からメールアドレスだけを取り出したいとき
- 電話番号の市外局番だけを抜き出したいとき
- URLからドメイン部分を取得したいとき
- 日付文字列を年・月・日に分解したいとき
- 商品コードから特定の桁だけを抽出したいとき
LEFT・RIGHT・MIDの入れ子から解放されて、数式がすっきりしますよ。
利用条件(Microsoft 365が必須)
REGEXEXTRACT関数を使うには、Microsoft 365のサブスクリプションが必要です。Excel 2019やExcel 2021などの永続ライセンス版では使えません。
対応環境は次のとおりです。
- Excel for Microsoft 365(Windows / Mac)
- Excel for the web
お使いのバージョンが対応しているか、事前に確認しておきましょう。バージョンが古いと #NAME? エラーになってしまいます。
REGEXEXTRACT関数の構文と引数
基本構文
=REGEXEXTRACT(テキスト, 正規表現パターン, [戻り値モード], [大文字小文字の区別])
第3引数と第4引数は省略可能です。まずは第1・第2引数だけで十分使えますよ。
第1引数:テキスト
抽出元の文字列またはセル参照を指定します。
=REGEXEXTRACT("お問い合わせ: taro@example.com まで", "[w.+-]+@[w.-]+")
=REGEXEXTRACT(A2, "d+")
実務ではセル参照を使うのが一般的です。セルが数値型の場合はそのままでは使えないので、TEXT関数(数値を指定した書式の文字列に変換する関数)で文字列化してから渡しましょう。
第2引数:正規表現パターン
抜き出したい形式を正規表現でダブルクォーテーションで囲んで指定します。
=REGEXEXTRACT(A2, "d{3}-d{4}")
上の例は「数字3桁+ハイフン+数字4桁」、つまり郵便番号の形式を取り出す数式です。正規表現の記号は、姉妹記事のExcelのREGEXTEST関数の使い方で早見表にまとめていますので、あわせて確認してみてください。
第3引数:戻り値モード(return_mode)
どのように抽出するかを数値で指定します。省略時は0です。
- 0(省略時):最初に一致した1つを返す
- 1:すべての一致を配列で返す(スピル)
- 2:キャプチャグループ(括弧で囲んだ部分)を配列で返す
この第3引数こそがREGEXEXTRACT関数の真骨頂です。後ほど具体例で詳しく見ていきます。
第4引数:大文字小文字の区別
大文字と小文字を区別するかを数値で指定します。省略すると0(区別する)です。
- 0(省略時):大文字と小文字を区別する
- 1:大文字と小文字を区別しない
英字を含むパターンを使うときだけ気にすれば大丈夫ですよ。
=REGEXEXTRACT("HELLO world", "[a-z]+") '"world"
=REGEXEXTRACT("HELLO world", "[a-z]+", 0, 1) '"HELLO"
Excel REGEXEXTRACT関数の基本的な使い方
それでは実際に数式を組み立ててみましょう。
文字列から最初の数字列を取り出す
もっともシンプルな例です。文字列に含まれる数字をまとめて抽出します。
=REGEXEXTRACT(A2, "d+")
A2が「商品コード12345番」なら結果は「12345」、「2026年4月」なら「2026」が返ります。d+ は「数字1文字以上の繰り返し」を表します。
抽出結果は常にテキスト型で返るので、数値として計算に使いたい場合はVALUE関数(文字列を数値に変換する関数)でラップしましょう。
=VALUE(REGEXEXTRACT(A2, "d+"))
郵便番号を抜き出す
住所の中から郵便番号だけを取り出す例です。
=REGEXEXTRACT(A2, "d{3}-d{4}")
A2が「〒100-0001 東京都千代田区」なら「100-0001」が返ります。{3} は「直前の要素の3回繰り返し」を意味する記号です。
本文からメールアドレスを抽出する
問い合わせメールの本文などからメールアドレスだけを抜き出す例です。
=REGEXEXTRACT(A2, "[w.+-]+@[w.-]+.w+")
A2が「ご連絡は taro@example.com までお願いします」なら「taro@example.com」が返ります。実務レベルのメールアドレス抽出にはこれで十分ですよ。
IFERRORでエラーを隠す
パターンが見つからないと #N/A エラーになります。IFERROR関数(エラー時に代替値を返す関数)でラップすると、空欄や任意のメッセージに置き換えられます。
=IFERROR(REGEXEXTRACT(A2, "d+"), "")
データにばらつきがある実務では、IFERRORとのセット使いをおすすめします。
実践的な使い方・応用例
電話番号の市外局番だけを抽出する
電話番号の先頭部分だけを取り出す例です。
=REGEXEXTRACT(A2, "^0d{1,4}")
「03-1234-5678」なら「03」、「0120-999-888」なら「0120」が返ります。^ は「文字列の先頭」、d{1,4} は「数字1〜4桁」を意味します。
市外局番と市内局番・加入者番号に分けたい場合は、次のキャプチャグループの例が便利です。
URLからドメイン部分を取得する
URLからホスト名(ドメイン)だけを取り出す例です。キャプチャグループ(括弧 () で囲んだ部分)と第3引数 2 を組み合わせます。
=REGEXEXTRACT(A2, "https?://([^/]+)", 2)
A2が「https://www.mashukabu.com/excel-tips/」なら「www.mashukabu.com」が返ります。括弧で囲んだ [^/]+(スラッシュ以外の1文字以上)の部分だけが抽出されるイメージです。
第3引数を 2 にすることで、括弧で囲んだキャプチャグループの中身だけを取り出せるのがポイントですよ。
日付文字列から年・月・日を分離する
「2026-04-09」のような文字列を年・月・日の3つに分解する例です。
=REGEXEXTRACT(A2, "(d{4})-(d{2})-(d{2})", 2)
この数式はスピル(数式が自動で配列に展開される機能)に対応していて、1つのセルに入力すると右方向に3つのセルへ「2026」「04」「09」が展開されます。
括弧を3つ書いてそれぞれの部分をキャプチャしているのがコツです。スラッシュ区切りの日付なら次のように書きます。
=REGEXEXTRACT(A2, "(d{4})/(d{1,2})/(d{1,2})", 2)
LEFT・MID・RIGHTで3つのセルに分解していた従来の方法と比べて、圧倒的にシンプルですよね。
本文中のハッシュタグをすべて抽出する
SNS投稿の文字列からハッシュタグをまとめて取り出す例です。第3引数に 1 を指定すると、一致するものをすべて配列として返します。
=REGEXEXTRACT(A2, "#w+", 1)
A2が「今日の学び #Excel #REGEXEXTRACT #正規表現」なら、下方向に「#Excel」「#REGEXEXTRACT」「#正規表現」の3つがスピルします。ハッシュタグの棚卸しやSNS運用のレポートで重宝しますよ。
メールアドレスからユーザー名とドメインを分ける
アットマークの前後を分けて取り出す例です。
=REGEXEXTRACT(A2, "([w.+-]+)@([w.-]+)", 2)
A2が「taro@example.com」なら「taro」「example.com」の2つに分かれてスピルします。顧客リストのドメインごとの集計などに便利ですよ。
よくあるエラーと対処法
REGEXEXTRACT関数で表示されるエラーと対処法をまとめました。
#N/A エラー
原因: 指定した正規表現パターンに一致する部分が見つからない。
対処法: IFERROR関数で代替値を返すようにします。データ全体でパターンが統一されていない場合の定番対処です。
=IFERROR(REGEXEXTRACT(A2, "d+"), "該当なし")
パターン自体が間違っていないか、サンプルデータで動作を確認してから本番データに適用するのがおすすめです。
#VALUE! エラー
原因: 第2引数に無効な正規表現を指定した。または第1引数に数値型セルを直接渡した。
対処法: 正規表現パターンを見直しましょう。特にエスケープ忘れ(( をそのまま使うなど)が多いので注意してください。数値セルを渡す場合はTEXT関数で文字列化します。
=REGEXEXTRACT(TEXT(A2, "0"), "d+")
#NAME? エラー
原因: REGEXEXTRACT関数に対応していないバージョンのExcelで使っている。または関数名のスペルミス。
対処法: Microsoft 365のサブスクリプションで最新版にアップデートしてください。Excel 2019・2021・LTSC 2024などでは使えません。
エラー一覧表
| エラー | 原因 | 対処法 |
|---|---|---|
| #N/A | パターン不一致 | IFERRORで代替値 |
| #VALUE! | 無効な正規表現・非文字列 | パターン見直し・TEXTで変換 |
| #NAME? | 非対応バージョン | Microsoft 365に更新 |
エラーが出ても原因は限られているので、落ち着いて確認すれば大丈夫ですよ。
REGEXTEST・REGEXREPLACEとの使い分け
REGEXEXTRACT関数には2つの姉妹関数があります。用途が異なるので、目的に合わせて使い分けましょう。
| 関数 | 戻り値 | 用途 |
|---|---|---|
| REGEXTEST | TRUE / FALSE | パターンに一致するかを判定する |
| REGEXEXTRACT | 一致した文字列 | パターンに一致する部分を抜き出す |
| REGEXREPLACE | 置換後の文字列 | パターンに一致する部分を別の文字列に置き換える |
使い分けのフローは次のとおりです。
- 「メールアドレスとして正しいか?」→ REGEXTEST
- 「本文からメールアドレスだけ抜き出したい」→ REGEXEXTRACT
- 「電話番号のハイフンを削除したい」→ REGEXREPLACE
3つとも同じPCRE2(Perl互換の正規表現)の書き方に対応しているので、パターンの知識はそのまま共通で使えます。REGEXTESTの詳しい使い方はExcelのREGEXTEST関数の使い方でも解説していますので、あわせて読んでみてください。
まとめ
REGEXEXTRACT関数は、Excelのセル上で正規表現を使って文字列を抜き出せる関数です。
この記事のポイントを整理します。
- 構文は
=REGEXEXTRACT(テキスト, 正規表現パターン, [戻り値モード], [大文字小文字の区別]) - Microsoft 365のサブスクリプションが必要
- 第3引数
0で最初の一致、1で全一致、2でキャプチャグループを取得 - キャプチャグループ(括弧)を使うと日付やURLを複数パートに分解できる
- 戻り値は常にテキスト型なので数値計算ではVALUE関数でラップする
#N/AエラーはIFERROR関数で代替値を返すのが定番対処- 姉妹関数のREGEXTEST(判定)・REGEXREPLACE(置換)と使い分けると便利
まずは =REGEXEXTRACT("価格1200円", "d+") のようなシンプルな式から試してみてください。LEFTやMIDを組み合わせた長い数式から解放されて、データ整理がぐっとラクになりますよ。
