PR

Power Queryで電話番号の表記を統一する

Power Queryで電話番号の表記を統一する Power Query応用

電話番号は人によって080-xxxx-yyyyといったようにハイフンを付けたり、080xxxxyyyyといった半角数字だったり入力がバラバラだったりします。データ分析をする上では表記は統一した方がいいでしょう。

この記事では、表記を半角数字、または全角数字のみに統一する方法について解説します。

事前準備

次の表記が統一されていない電話番号の一覧を用意します。

データの加工

Text.Selectで数字のみを抽出する

「列の追加」タブを開き、「カスタム列」をクリックします。

「新しい列名」に電話番号(表記統一)などの列名を入力し、「カスタム列の式」に数字のみを抽出する数式を入力し、OKをクリックします。

数式は以下になります。Text.Selectを使って、半角数字の0~9、全角数字の0~9を抽出しています。

= Text.Select([電話番号], {"0".."9","0".."9"})

このままだと、全角と半角が混ざってしまうため、半角に統一していきます。

全角数字を半角に変換する

Excelであれば、半角への変換はASC関数を、全角への変換はJIS関数を使えば簡単に変換できます。

しかし、Power Queryには半角全角を変換する便利な関数はありませんので工夫する必要があります。

「カスタム列の式」を次のように修正します。

= Text.Combine(List.ReplaceMatchingItems(
  Text.ToList(Text.Select([電話番号], {"0".."9","0".."9"})),
    List.Zip(
      {
        {"0" .. "9"}
        ,{"0" .. "9"}
      }
    )
  )
)

半角数字に統一されました。

これは何をやっているかと言うと、次の5ステップでデータ加工を行っています。

データ加工の流れ
  • Step1
    Text.Selectを使って、数字のみを抽出する

    前述の通り、半角数字の0~9、全角数字の0~9を抽出しています。

    Text.Select([電話番号], {"0".."9","0".."9"})
  • Step2
    Text.ToListを使って、抽出した数字をリストに変換する

    Step1で抽出した数字を引数に入れます。

    Text.ToList(Text.Select([電話番号], {"0".."9","0".."9"}))

    テキスト(文字列)をリストに変換されます。

  • Step3
    List.Zipを使って全角半角の変換リストを作成する

    次の式で、全角のリスト{“0” .. “9”}と半角のリスト{“0” .. “9”}を引数に入れます。

    List.Zip(
      {
        {"0" .. "9"}
        ,{"0" .. "9"}
      }
    )

    結果は、全角のゼロと半角のゼロといった、同じ数字で全角、半角の組み合わせのリストが返ってきます。

    { {0, 0}, {1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9} }

    このリストを使って、全角→半角へ変換します。

  • Step4
    List.ReplaceMatchingItemsを使って、全角→半角へ変換する

    List.ReplaceMatchingItemsは指定された変換リストから値の置き換えを行います。

    Step2で作成したリストを第1引数に入れ、第2引数に変換リストを入れます。

    List.ReplaceMatchingItems(
      Text.ToList(Text.Select([電話番号], {"0".."9","0".."9"})),
      List.Zip(
        {
          {"0" .. "9"}
          ,{"0" .. "9"}
        }
      )
    )

    変換リストが{0, 0}といったように、{全角数字, 半角数字}になっているため、全角→半角へ変換してくれます。

  • Step5
    Text.Combineを使って、リストを結合してテキストに変換する

    Text.Combineを使って数式が完成です。

    = Text.Combine(List.ReplaceMatchingItems(
      Text.ToList(Text.Select([電話番号], {"0".."9","0".."9"})),
        List.Zip(
          {
            {"0" .. "9"}
            ,{"0" .. "9"}
          }
        )
      )
    )

次のように半角数字で表記が統一されます。

半角数字を全角に変換する

全角→半角への変換方法の解説でしたが、半角→全角への変換はどうすれば良いでしょうか。

List.Zipで全角半角の変換リストを作りましたが、リストの作り方を{全角数字}, {半角数字}から{半角数字}, {全角数字}に並べ替えます。

List.Zip(
  {
    {"0" .. "9"}
    ,{"0" .. "9"}
  }
)

完成形の数式は次の通りです。

= Text.Combine(List.ReplaceMatchingItems(
  Text.ToList(Text.Select([電話番号], {"0".."9","0".."9"})),
    List.Zip(
      {
        {"0" .. "9"}
        ,{"0" .. "9"}
      }
    )
  )
)

全角数字に表記が統一されました。


Excel/Power Queryのデータ加工で悩んでおり、ネットや本で調べても解決しない場合は、一度ご相談下さい。

ご相談内容の例
  • 前任者が作ったExcelファイルの数式等が意味不明で困っている
  • Power Queryを使ってExcelでデータ加工を行いたいが、うまく使いこなせない
  • 手作業が多く、業務効率化を行いたいが、どう進めていいか分からない

ココナラでご相談を受け付けております。ココナラの会員登録が必要になります。

Power Queryの学習に役立つおすすめ本
初心者向け 初心者~中級者向け 中級者~上級者向け
プロフィール
たがみ

IT業界20年程度のシステムエンジニアです。
構築したシステムのデータ検証をExcelで実施することが多く、検証作業の効率化を模索しているときにPower Queryと出会いました。
Excel業務効率化の手助けになればと当ブログを解説しました。
今ではデータ分析でPower BIを活用しており、Power BI、Excelの両方でPower Queryを活用しています。

たがみをフォローする
Power Query応用
たがみをフォローする
タイトルとURLをコピーしました