Python in Excel実践:バラバラな電話番号表記を正規表現で統一する方法

pandas python 1

Excelで業務データを扱っていると、
「電話番号は入っているが、形式がバラバラで使えない」
という場面に遭遇することは多いのではないでしょうか。

例えば、

  • 文章の途中に電話番号が埋め込まれている
  • (123) 456-7890123-456-7890456.7890 など表記が統一されていない
  • 1つのセルに複数の電話番号が入っている

こうしたデータを、Excelの関数だけで綺麗に処理するのはなかなか大変です。

そこで役に立つのが Python in Excel です。
Pythonの「正規表現」を使うことで、不規則な文字列からでも
必要な情報だけを柔軟に抽出・整形できます。

この記事では、Excel上の画面遷移に沿って、
Python in Excel を使った電話番号抽出の流れを見ていきます。

image

まず最初に行っているのは、Python in Excel のセルで
正規表現を扱うための準備です。

ここでは、Pythonの標準ライブラリである re モジュールを
インポートしています。

このセルではまだ何かを処理しているわけではなく、
「これから正規表現を使いますよ」という宣言のような位置づけです。

Python in Excel では、このような準備コードも
Excelのセルとして管理できるのが特徴です。

image

次に、今回の処理の中心となる
電話番号の抽出・整形ロジックを関数として定義します。

このセルでは、以下の2つの関数を定義しています。

def format_phone_number(match):
  area_code = match.group(1)
  first_part = match.group(2)
  last_part = match.group(3)
  if area_code is not None:
    return f"({area_code}) {first_part}-{last_part}"
  else:
    return f"{first_part}-{last_part}"  

def extract_nums(text):
  pattern = r'\b(?:\+?1\s?)?\(?(?:(\d{3})\)?[-.\s]?)?(\d{3})[-.\s]?(\d{4})\b'
  matches = re.finditer(pattern, text)

  formatted_numbers = [format_phone_number(match) for match in matches]
  result = ", ".join(formatted_numbers)
  return result

ここで重要なのは、「このセルでは処理を実行していない」という点です。
あくまで あとで使う道具(関数)を定義している段階になります。

  • extract_nums
    • 文字列の中から電話番号らしき部分を正規表現で探します
    • 見つかった電話番号をすべて処理対象にします
  • format_phone_number
    • 抽出された電話番号を見やすい形式に整形します
    • 市外局番がある場合とない場合で表示を切り替えます

このように、
「探す処理」と「整える処理」を分けて定義しているのがポイントです。

image

image

DataFrameが用意できたら、
先ほど定義した extract_nums 関数を使って
データを一括で処理します。

ここでは、DataFrameの1列に対して apply を使い、
各行の文字列に電話番号抽出処理を適用しています。

重要なのは、

  • 電話番号が1つもない行
  • 電話番号が1つだけある行
  • 複数の電話番号が含まれている行

これらを 同じロジックでまとめて処理できる点です。

Excel関数では複雑になりがちな処理が、
非常にシンプルな記述で実現できます。

image

リストをExcel値で表示すると、期待通りの情報が反映されています。

image

この記事では、Python in Excel を使って
不規則な文字列から電話番号を抽出・整形する流れを紹介しました。

  • 正規表現で表記ゆれをまとめて吸収できる
  • PythonのロジックをExcel上で再利用できる
  • Excelの操作感はそのまま

Python in Excel は、
「全部Pythonで書き直す」ためのツールではなく、
Excelでは厳しい部分だけを補うための実践的な選択肢です。

日々の業務で少しでも「面倒だな」と感じている処理があれば、
一度Python in Excelで置き換えられないか試してみると、
作業効率が大きく変わるかもしれません。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。