スプレッドシートのREGEXEXTRACT関数の使い方|正規表現で文字列を抽出

スポンサーリンク

スプレッドシートで「住所から都道府県だけ取り出したい」「メールアドレスの@以降を抜き出したい」と思ったことはありませんか? MID関数FIND関数を組み合わせれば文字の位置指定で抽出できます。でも、文字数がバラバラなデータには対応しきれないのが現実です。

REGEXEXTRACT関数を使えば、正規表現のパターンに一致する部分だけをピンポイントで抽出できます。この記事ではREGEXEXTRACT関数の基本から実務パターンまで丁寧に解説しますね。

REGEXEXTRACT関数とは?正規表現で文字列を抽出する関数

REGEXEXTRACT関数は、セルの文字列から正規表現パターンに一致する部分を抽出して返す関数です。読み方は「レジェックスエクストラクト」。「Regex(正規表現)」+「Extract(抽出)」が語源です。

たとえば「tanaka@example.com」から @(.+) のパターンで抽出すると「example.com」が返ります。@以降のドメイン部分だけを取り出せるわけです。

REGEXEXTRACT関数はGoogleスプレッドシート独自の関数で、Excelには存在しません。Excelで同じことをするにはVBAが必要です。スプレッドシートなら関数だけで正規表現抽出ができるのが大きな強みですよ。

「正規表現」って何?

正規表現とは、文字列のパターンを記号で表すルールです。たとえば [0-9]+ は「1文字以上の数字」を意味します。最初はとっつきにくく感じるかもしれません。でも、よく使うパターンは決まっています。この記事で紹介するパターンをコピーして使えばOKです。正規表現の記号一覧はREGEXMATCH関数の記事でまとめていますので、そちらも参考にしてください。

REGEXEXTRACT関数の書き方(構文と引数)

基本構文

=REGEXEXTRACT(テキスト, 正規表現)
引数必須/省略可説明
テキスト必須抽出元の文字列またはセル参照
正規表現必須抽出したいパターンの正規表現

戻り値はパターンに一致した文字列です。一致する部分がなければ#N/Aエラーになります。

キャプチャグループ(括弧)の使い方

REGEXEXTRACT関数の正規表現に括弧 () を使うと、括弧内に一致した部分だけを返します。これを「キャプチャグループ」と呼びます。

=REGEXEXTRACT("tanaka@example.com", "@(.+)")
  → "example.com"(@の後ろだけを抽出)

=REGEXEXTRACT("tanaka@example.com", ".+@(.+)")
  → "example.com"(同じ結果)

=REGEXEXTRACT("tanaka@example.com", "(.+)@")
  → "tanaka"(@の前だけを抽出)

括弧なしの場合はパターン全体に一致した文字列を返します。括弧ありの場合は括弧内の部分だけを返します。この違いがポイントですよ。

REGEXEXTRACT関数の基本的な使い方

数字だけを抽出する

セルA2に「商品コード: ABC-123」が入っているとします。

=REGEXEXTRACT(A2, "[0-9]+")   → "123"(数字部分を抽出)
=REGEXEXTRACT(A2, "[A-Z]+")   → "ABC"(英大文字部分を抽出)

[0-9]+ は「1文字以上の数字」を意味します。最初に一致した部分が返ります。

特定のパターンを抽出する

セルA2に「受付番号: ORD-2024-0456」が入っているとします。

=REGEXEXTRACT(A2, "ORD-d{4}-d{4}")
  → "ORD-2024-0456"(注文番号パターンを抽出)

d{4} は「数字がちょうど4桁」を意味します。パターン全体に一致する文字列がそのまま返ります。

複数のキャプチャグループで分割抽出する

括弧を複数使うと、それぞれのグループが別々のセルに展開されます。

セルA2に「山田太郎 03-1234-5678」が入っているとします。

=REGEXEXTRACT(A2, "(.+)s(d{2,4}-d{1,4}-d{3,4})")
  → "山田太郎" と "03-1234-5678" が隣り合う2つのセルに展開

名前と電話番号を一度に分割できるのが便利ですね。複数グループの結果は横方向のセルに出力されます。

大文字・小文字を区別せずに抽出する

REGEXEXTRACT関数はデフォルトで大文字と小文字を区別します。区別せずに抽出したいときは (?i) を先頭に付けます。

=REGEXEXTRACT("Hello World", "(?i)hello")
  → "Hello"(大文字小文字を無視してマッチ・抽出)

実務で使えるパターン集

メールアドレスからドメインを抽出する

顧客リストのメールアドレスからドメイン部分だけを取り出します。

=REGEXEXTRACT(A2, "@(.+)")
セルの値結果説明
tanaka@example.comexample.com@以降を抽出
sato@company.co.jpcompany.co.jp@以降を抽出
info@test.orgtest.org@以降を抽出

ドメイン別に顧客を集計したいときに便利です。COUNTIF関数と組み合わせれば、ドメイン別の件数集計もできます。

URLからドメイン名を抽出する

Webサイトの一覧からドメイン名だけを取り出します。

=REGEXEXTRACT(A2, "https?://([^/]+)")
セルの値結果
https://www.example.com/pagewww.example.com
http://blog.test.jp/article/123blog.test.jp

https?:// は「httpまたはhttps」を意味します。([^/]+) は「スラッシュ以外の文字が1文字以上」です。

住所から都道府県を抽出する

住所データから都道府県名だけを取り出します。

=REGEXEXTRACT(A2, "^(.{2,3}[都道府県])")
セルの値結果
東京都渋谷区神南1-2-3東京都
神奈川県横浜市西区神奈川県
大阪府大阪市北区大阪府
北海道札幌市中央区北海道

.{2,3} は「任意の文字が2〜3文字」を意味します。「東京(2文字)」から「神奈川(3文字)」まで対応できます。

電話番号からエリアコードを抽出する

電話番号の先頭部分(エリアコード)だけを取り出します。

=REGEXEXTRACT(A2, "^(0d{1,4})")
セルの値結果
03-1234-567803
090-1234-5678090
0120-123-4560120

IFERROR関数と組み合わせてエラーを回避する

REGEXEXTRACT関数はパターンに一致しないと#N/Aエラーを返します。IFERROR関数で囲めばエラーを回避できます。

=IFERROR(REGEXEXTRACT(A2, "@(.+)"), "ドメインなし")

パターンに一致しないセルには「ドメインなし」と表示されます。一覧表で使うときは必ずIFERRORで囲むのがおすすめですよ。

ARRAYFORMULA関数と組み合わせて一括抽出する

ARRAYFORMULA関数と組み合わせれば、複数行を一括で処理できます。

=ARRAYFORMULA(IFERROR(REGEXEXTRACT(A2:A100, "@(.+)"), ""))

この数式をB2セルに1つ入れるだけで、A2からA100までのメールアドレスからドメインを一括抽出できます。

よくあるエラーと対処法

エラー原因対処法
#N/Aパターンに一致する部分がないIFERRORで囲む。正規表現の見直しも確認
#VALUE!テキストが数値=REGEXEXTRACT(TEXT(A2,"0"), "パターン") で文字列に変換
#VALUE!テキストが空セル=IF(A2="", "", REGEXEXTRACT(A2, "パターン")) で空チェック
#REF!正規表現の構文エラー括弧の閉じ忘れ・エスケープ漏れを確認

数値セルで#VALUE!エラーになるケース

REGEXEXTRACT関数の第1引数は文字列が必要です。セルに数値が入っている場合は#VALUE!エラーです。

=REGEXEXTRACT(A2, "d+")           → A2が数値だと #VALUE!
=REGEXEXTRACT(TEXT(A2, "0"), "d+") → TEXT関数で文字列に変換すればOK

数値から一部を抽出したい場合は、TEXT関数で文字列に変換してから渡しましょう。

パターン不一致で#N/Aエラーになるケース

REGEXMATCH関数はパターン不一致でFALSEを返します。一方、REGEXEXTRACT関数は#N/Aエラーを返します。

=REGEXEXTRACT("abc", "d+")  → #N/A(数字が含まれない)

一覧表で使うときは =IFERROR(REGEXEXTRACT(A2, "パターン"), "") のようにIFERRORで囲むのが定番です。

MID+FIND関数との比較

文字列の抽出はMID関数FIND関数の組み合わせでもできます。REGEXEXTRACTとの違いを比較しましょう。

同じ処理を両方で書いてみる

メールアドレス「tanaka@example.com」から@以降を抽出する場合です。

MID+FIND関数の場合:

=MID(A2, FIND("@", A2)+1, LEN(A2)-FIND("@", A2))

REGEXEXTRACT関数の場合:

=REGEXEXTRACT(A2, "@(.+)")

REGEXEXTRACT関数のほうがシンプルですね。MID+FINDは「@の位置を探す→その後ろから末尾までを取る」と2段階の計算が必要です。

比較表

比較項目REGEXEXTRACTMID + FIND
数式の長さ短い長い(3関数の組み合わせ)
パターン抽出得意(正規表現で柔軟)苦手(固定位置のみ)
可変長データ対応できる文字数計算が必要
複数パターン1つの数式で対応複数のFINDが必要
Excel互換なし(Sheets独自)あり
学習コスト正規表現の知識が必要低い

どちらを使うべき?

  • 固定位置から切り出す(左から3文字、5文字目から8文字)→ MID関数LEFT関数RIGHT関数で十分
  • パターンで抽出する(メールのドメイン、URLのパス)→ REGEXEXTRACT関数一択
  • Excelとの互換性が必要 → MID + FINDを使う

データの形式がバラバラなときほど、REGEXEXTRACT関数の威力を発揮します。

REGEXMATCH・REGEXREPLACEとの使い分け

スプレッドシートには正規表現を使う関数が3つあります。目的で使い分けましょう。

関数目的戻り値使用例
REGEXMATCHパターンに一致するか判定TRUE / FALSE入力チェック、条件分岐
REGEXEXTRACTパターンに一致する部分を抽出一致した文字列ドメイン抽出、番号取り出し
REGEXREPLACEパターンに一致する部分を置換置換後の文字列ハイフン除去、書式統一

具体例で比較

セルA2に「注文番号: ORD-2024-0123」が入っているとします。

=REGEXMATCH(A2, "ORD-d{4}-d{4}")
  → TRUE(注文番号パターンに一致するか判定)

=REGEXEXTRACT(A2, "ORD-d{4}-d{4}")
  → "ORD-2024-0123"(注文番号部分を抽出)

=REGEXREPLACE(A2, "ORD-", "")
  → "注文番号: 2024-0123"(「ORD-」を除去)

判定REGEXMATCH抽出はREGEXEXTRACT、置換はREGEXREPLACEと覚えておきましょう。

まとめ

REGEXEXTRACT関数は、正規表現でパターンに一致する部分を抽出できるスプレッドシート独自の関数です。

  • 基本: =REGEXEXTRACT(テキスト, 正規表現) で一致部分を返す
  • キャプチャグループ: 括弧 () で囲んだ部分だけを抽出できる
  • 実務活用: ドメイン抽出・都道府県抽出・番号分解に最適
  • エラー対策: パターン不一致は#N/Aエラー。IFERRORで囲むのが定番
  • 使い分け: 判定はREGEXMATCH、抽出はREGEXEXTRACT、置換はREGEXREPLACE

MID+FINDでは書ききれないパターン抽出が必要なとき、ぜひ活用してみてください。正規表現の基本はREGEXMATCH関数の記事でまとめています。そちらも合わせてチェックしてみてくださいね。

タイトルとURLをコピーしました