shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

Excelで電話番号データからハイフン等の数字以外を消すユーザー定義関数サンプル

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での方法

shikumika.org

以上、Excelで電話番号データからハイフン等の数字以外を消すユーザー定義関数のサンプルでした。