正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)
正規表現 ("regex") を扱える3つの新関数です。
REGEXTEST関数:正規表現と一致するかどうかをチェック
REGEXREPLACE関数:正規表現に基づいて文字列を別の文字列に置き換える
REGEXEXTRACT関数:正規表現に基づいて文字列からテキストを抽出
先読み・後読み
その為、機能も未確定であり今後変更の可能性もあります。
正規表現について
以下は、正規表現の関数で指定するパターンを記述する正規表現 ("regex")です。
メタ文字
^ $ ? * + . | { } \ [ ] ( )
正規表現
| シンボル | 機能 |
| 位置マッチング | |
| ^ | 文字列の先頭にのみマッチします。 |
| $ | 文字列の末尾にのみマッチします。 |
| \b | 任意の単語境界にマッチします。 |
| \B | 任意の単語境界以外の位置にマッチします。 |
| リテラル | |
| 英数字 | 英字と数字に文字どおりにマッチします。 |
| \n | 改行にマッチします。 |
| \f | フォーム フィードにマッチします。 |
| \r | キャリッジ リターンにマッチします。 |
| \t | 水平タブにマッチします。 |
| \v | 垂直タブにマッチします。 |
| \? | ? にマッチします。 |
| \* | * にマッチします。 |
| \+ | + にマッチします。 |
| \. | . にマッチします。 |
| \| | | にマッチします。 |
| \{ | { にマッチします。 |
| \} | } にマッチします。 |
| \\ | \ にマッチします。 |
| \[ | [ にマッチします。 |
| \] | ] にマッチします。 |
| \( | ( にマッチします。 |
| \) | ) にマッチします。 |
| \xxx | 8進数 xxx によって表現されるASCII文字にマッチします。 |
| \xdd | 16進数 dd によって表現されるASCII文字にマッチします。 |
| \uxxxx | UNICODE xxxx によって表現されるASCII文字にマッチします。 |
| 文字クラス | |
| [xyz] | 文字セットに含まれている任意の1文字にマッチします。 |
| [^xyz] | [^xyz] 文字セットに含まれていない任意の1文字にマッチします。 |
| . | \n 以外の任意の文字にマッチします。 |
| \w | 単語に使用される任意の文字にマッチします。[a-zA-Z_0-9]と等価。 |
| \W | 単語に使用される文字以外の任意の文字にマッチします。[^a-zA-Z_0-9]と等価。 |
| \d | 任意の数字にマッチします。[0-9]と等価。 |
| \D | 任意の数字以外の文字にマッチします。[^0-9]と等価。 |
| \s | 任意のスペース文字にマッチします。[ \t\r\n\v\f]と等価。 |
| \S | 任意の非スペース文字にマッチします。[^ \t\r\n\v\f]と等価。 |
| 繰り返し | |
| {x} | 正規表現のちょうど x個の直前の文字にマッチします。 |
| {x,} | 正規表現のx個以上の直前の文字にマッチします。 |
| {x,y} | 正規表現のx個以上、y個以下の直前の文字にマッチします。 |
| ? | ゼロ個または1個の直前の文字にマッチします。{0,1}と等価。 |
| * | ゼロ個以上の直前の文字にマッチします。{0,}と等価。 |
| + | 1個以上の直前の文字にマッチします。{1,}と等価。 |
| 選択とグループ化 | |
| () | 複数の句をグループ化して、1つの句を作成します。ネストすることができます。 "(ab)?(c)" は "abc" または "c" にマッチします。 |
| | | 複数の句を1つの正規表現にまとめ、これらのうちの任意の句にマッチします。 |
| 後方参照 | |
| ()\n | n番目の括弧で囲まれた句にマッチします。 |
※これで全てではありません。他や詳細については書籍またはネット検索でしらべてください。
REGEXTEST関数
一致する場合はTRUE を返し、一致しない場合はFALSE を返します。
構文
| 引数 | 説明 |
| text | 一致するテキストを含むセルへのテキストまたは参照。 |
| pattern | 一致させるテキストのパターンを記述する正規表現 ("regex")。 |
| case_sensitivity | 一致で大文字と小文字が区別されるかどうかを判断します。 既定では大文字と小文字が区別されます。 0: 大文字と小文字の区別 1: 大文字と小文字を区別しない |
使用例

「{x}」はちょうどx個の直前の文字にマッチします。
つまり、数字が3個、「-」を挟んで数字が4個、このようなテキストになっているかどうかの確認です。
上記数式は単純にTrue/Falseを返しているだけですが、IF関数等で文字列に変換すればよいでしょう。
=IF(REGEXTEST(A2,B2),"正","否")
REGEXREPLACE関数
構文
| 引数 | 説明 |
| text | 文字列または文字列を置き換えるテキストを含むセルへの参照。 |
| pattern | 置き換えるテキストのパターンを記述する正規表現 ("regex")。 |
| replacement | パターンのインスタンスを置き換えるテキスト。 |
| occurrence | 置き換えるパターンのインスタンスを指定します。 既定では、occurrence は 0 で、すべてのインスタンスが置き換えられます。 負の数値は、末尾から検索して、そのインスタンスを置き換えます。 |
| case_sensitivity | 一致で大文字と小文字が区別されるかどうかを判断します。 既定では大文字と小文字が区別されます。 0: 大文字と小文字の区別 1: 大文字と小文字を区別しない |
REGEXREPLACEは常にテキスト値を返します。
使用例

「\D」は任意の数字以外にマッチします。[^0-9]と等価です。
replacementを省略することでマッチした文字を消去しています。

REGEXEXTRACT関数
最初の一致、すべての一致、または最初の一致からグループをキャプチャすることができます。
構文
| 引数 | 説明 |
| text | 文字列または文字列を抽出するテキストを含むセルへの参照。 |
| pattern | 抽出するテキストのパターンを記述する正規表現 ("regex")。 |
| return_mode | 抽出する文字列を指定する数値。 既定では、戻りモードは 0 です。 0: パターンに一致する最初の文字列を返します 1: パターンに一致するすべての文字列を配列として返します 2: 最初の一致からキャプチャ グループを配列として返す |
| case_sensitivity | 一致で大文字と小文字が区別されるかどうかを判断します。 既定では大文字と小文字が区別されます。 0: 大文字と小文字の区別 1: 大文字と小文字を区別しない |
REGEXEXTRACT は常にテキスト値を返します。
使用例

つまり、「\D+|\d+」で数字と数字以外のそれぞれにマッチします。

「?」は0個または1個の直前の文字にマッチ
「*」は0個以上の直前の文字にマッチ
「.*?」は最短一致のパターンとして頻繁に使用されるものです。
「(」や「)」はメタ文字なので、この文字自身を使用するには直前に「\」を付けます。
先読み・後読み
先読み・後読みについては、説明も難しいのでここでは簡単な紹介だけにとどめます。
| 書き方 | 意味、説明 |
| (?=○) | 肯定先読み。直後に○がある。 |
| (?!○) | 否定先読み。直後に○が無い。 |
| (?<=○) | 肯定後読み。直前に○がある。 |
| (?<!○) | 否定後読み。直前に○が無い。 |
括弧()でかこまれた括弧()の中の文字列を抽出

CSVの分割

サンプル1
=REGEXREPLACE(
REGEXREPLACE(
REGEXREPLACE(
REGEXEXTRACT(
A1,"(^|,)(\s*""((\r\n|\n|""""|,|.)*?)""\s*|(.*?))(?=,|$)",1),
"^,",""),
"^""|""$",""),
"""""","""")
サンプル2
https://x.com/furyutei/status/1979079965061816561
こちらを参考に作成しました。
=REGEXREPLACE(
REGEXREPLACE(
REGEXEXTRACT(
A1,"(?<=\A|,)(""(""""|[^""])*""|[^,]*)",1),
"^""|""$", ""),
"""""", """")また、実務で扱うCSVはイレギュラーなものもあるので、望む結果となるかは、良く確認してください。
同じテーマ「エクセル入門」の記事
複数の文字列を検索して置換するSUBSTITUTE
LAMBDA以降の新関数の問題集
LAMBDA以降の新関数の問題と解説(ヘルパー関数編)
LAMBDA以降の新関数の問題と解説(配列操作関数編)
PY関数(Pythonコードをセル内で実行)
GROUPBY関数(縦軸でグループ化して集計)
PIVOTBY関数(縦軸と横軸でグループ化して集計)
イータ縮小ラムダ(eta reduced lambda)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)
TRANSLATE関数(翻訳) DETECTLANGUAGE関数(言語識別)
新着記事NEW ・・・新着記事一覧を見る
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
