Excelで、大量の電話番号リストからハイフン等の数字以外を効率的に削除するため、正規表現を用いたユーザー定義関数のサンプルを作成した備忘メモ。
作成の背景は顧客リストの整理。電話番号リストには次のアウトプットイメージのように、数字以外に、-(全角ハイフン)、-(半角ハイフン)、全角半角の括弧などが混在していて、整理や活用がしづらい状態だった。 関数やExcelの標準置換機能ではシンプルな置換が難しく、正規表現でのユーザー定義関数を作成。
なお、Excelの付加機能でもあるPower Queryなら、とても簡単に文字列から数字だけ抽出ができるので、以下は正規表現で処理したい理由がある時の参考。
アウトプットイメージ
今回実施したかったことは、次のような数字と文字が混在するデータから、数値以外を削除するユーザー定義関数。
012-345-6789
(012)345-6789
(012)345-6789
この場合は、全て”012345678”に変換したい。
Excelでのイメージは次のとおり。
正規表現で、[^0-9]は、数字以外という意味。数字以外を空欄(””)に置換し、削除しています。 置換のサンプルなので、他の値に置換も可能。
作成したユーザー定義関数は、次のとおり。
~ Function 正規表現で置換(パターン As String, ByVal 検索対象文字列 As String, ByVal 置換文字列 As String, Optional マッチ As Boolean = True) As String Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = パターン ' パターンを設定します regEx.IgnoreCase = False ' 大文字と小文字を区別するように設定します regEx.Global = マッチ ' true 複数回マッチ、falseは先頭1回だけにしたい場合 正規表現で置換 = regEx.Replace(検索対象文字列, 置換文字列) End Function ~
上記で、変数「マッチ」は、false を指定すると、検索条件に一致した一つ目のみ置換します。 なお、変数「マッチ」は、Optionalを使って、指定がない場合は True にしています。
参考にしたコード
参考にしたコードは以下で、正規表現で一致した場所の指定追加などを変更。
Replace メソッド | Microsoft Learn
正規表現で使用できる文字およびエスケープ シーケンスの一覧
Pattern プロパティ | Microsoft Learn
ユーザー定義関数の補足
ユーザー定義関数の使い方等の補足は以下参考 shikumika.org
Excelで特定の文字より後ろにある文字列を抽出したい場合はこちら。 shikumika.org
Power Queryでの方法
以上、Excelで電話番号データからハイフン等の数字以外を消すユーザー定義関数のサンプルでした。