概要
Excel標準関数には「正規表現(Regex)」のような高度な文字列操作機能はありません。複雑なパターン抽出や置換をしたい場合は、Power Queryを使うのが推奨です。Power QueryはExcelに組み込まれているデータ変換ツールで、M言語を使って柔軟な文字列処理が可能です。正規表現そのものは直接サポートされていませんが、Text.Select / Text.Remove / Text.Replace / Text.Middleなどを組み合わせることで「正規表現風」の操作を実現できます。
基本の使い方(Power Query)
文字抽出の基本
Text.Select([列名], {"0".."9"})
→ 数字だけを抽出(正規表現でいう [0-9]+ に近い動作)
文字削除の基本
Text.Remove([列名], {"A".."Z"})
→ 英大文字を削除(正規表現でいう [A-Z] の除去)
文字置換の基本
Text.Replace([列名], "株式会社", "(株)")
→ 「株式会社」を「(株)」に置換(正規表現の s/株式会社/(株)/ に近い)
具体例
数字だけ抽出(電話番号から数字のみ)
Text.Select([電話番号], {"0".."9"})
「03-1234-5678」→「0312345678」
英字だけ抽出(コードからアルファベット部分)
Text.Select([コード], {"A".."Z","a".."z"})
「AB123CD」→「ABCD」
特定文字を削除(記号除去)
Text.Remove([テキスト], {"-","(",")"})
「(03)-1234-5678」→「0312345678」
応用テンプレート
複数置換を連鎖
Text.Replace(Text.Replace([列名],"㈱","(株)"),"有限会社","(有)")
複数の表記ゆれを一括で統一。
部分抽出(正規表現のキャプチャ風)
Text.Middle([列名], Text.PositionOf([列名], "@")+1)
メールアドレスから「@」以降を抽出(ドメイン部分)。
数字と文字を分離(正規表現のグループ風)
let
数字 = Text.Select([列名], {"0".."9"}),
文字 = Text.Select([列名], {"A".."Z","a".."z"})
in
[数字=数字, 文字=文字]
「AB123CD」→ 数字「123」、文字「ABCD」。
よくあるつまずきと対策
正規表現そのものは使えない
Power QueryはRegexを直接サポートしていません。代わりにText関数群を組み合わせます。
文字範囲指定の便利さ
{"0".."9"}や{"A".."Z"}のように範囲指定が可能。これを活用すると正規表現風の操作が簡単になります。
複雑なパターンは分解して処理
「抽出→削除→置換」を組み合わせることで正規表現に近い処理を段階的に実現できます。
例題
問題1: A列の電話番号「03-1234-5678」から数字だけを抽出してB列に表示してください。
解答例(Power Query式):
Text.Select([A列], {"0".."9"})
問題2: C列のコード「AB123CD」からアルファベット部分だけを抽出してD列に表示してください。
解答例:
Text.Select([C列], {"A".."Z","a".."z"})
問題3: E列の文字列「㈱山田有限会社」から「㈱」を「(株)」、「有限会社」を「(有)」に置換してF列に表示してください。
解答例:
Text.Replace(Text.Replace([E列],"㈱","(株)"),"有限会社","(有)")
問題4: G列のメールアドレス「user@example.com」からドメイン部分をH列に表示してください。
解答例:
Text.Middle([G列], Text.PositionOf([G列], "@")+1)
問題5: I列の文字列「AB123CD」から数字部分と文字部分を分離してJ列とK列に表示してください。
解答例:
let
数字 = Text.Select([I列], {"0".."9"}),
文字 = Text.Select([I列], {"A".."Z","a".."z"})
in
[数字=数字, 文字=文字]
まとめ
Excel標準関数では正規表現のような複雑な文字列処理は難しいですが、Power QueryのText関数群を使えば「正規表現風」の操作が可能です。範囲指定や複数置換を組み合わせることで、抽出・削除・置換を自在に行えます。講師として強調したいのは「正規表現を完全に再現するのではなく、Power Queryの仕組みで段階的に近づける」こと。これを理解すれば、Excelでの文字列処理が一段と強力になります。
