← 作品一覧に戻る
業務自動化 / データクレンジング

顧客リスト自動整形ツール(デモ)

名簿や取引先リストによくある「表記のゆれ」を、ルールを決めて一括で整えるツールです。 手作業だと1件ずつ目視で直す必要がある作業を、貼り付けてボタン1回で終わらせます。

※ このページはポートフォリオ用のデモです。掲載データはすべて架空のものです。
入力したデータはブラウザの中だけで処理され、サーバーには一切送信されません。

1. 整形したいデータを貼り付ける

2. 処理結果

読み込んだ件数
整形後の件数
修正したセル数
削除した重複行

    「整形を実行する」を押すと、ここに結果が表示されます。

    3. 同じ処理を実務で使う場合

    Excelファイルが手元にある場合

    Excel VBA のマクロにして、ボタン1つで同じシート上を整形します。ファイルを開いたまま完結します。

    Googleスプレッドシートの場合

    GAS(Google Apps Script)でメニューを追加し、共有シートを開いた全員が同じ処理を実行できます。

    毎日・大量に処理する場合

    Python スクリプトにして、フォルダ内のCSVをまとめて処理します。定期実行の設定まで対応できます。

    # 顧客リストの表記ゆれを整えて1本のCSVにまとめる
    import re, unicodedata, glob
    import pandas as pd
    
    def to_hankaku(s: str) -> str:
        # 全角の英数字・記号を半角へ(カタカナは全角のまま残す)
        return unicodedata.normalize("NFKC", str(s)).strip()
    
    def format_tel(s: str) -> str:
        d = re.sub(r"\D", "", to_hankaku(s))          # 数字以外を除去
        if len(d) == 11:                               # 携帯 090-1234-5678
            return f"{d[:3]}-{d[3:7]}-{d[7:]}"
        if len(d) == 10:                               # 固定 092-123-4567
            return f"{d[:3]}-{d[3:6]}-{d[6:]}"
        return to_hankaku(s)                           # 想定外はそのまま残して目視確認
    
    def format_zip(s: str) -> str:
        d = re.sub(r"\D", "", to_hankaku(s))
        return f"{d[:3]}-{d[3:]}" if len(d) == 7 else to_hankaku(s)
    
    frames = []
    for path in glob.glob("input/*.csv"):
        df = pd.read_csv(path, dtype=str).fillna("")
        df["氏名"]   = df["氏名"].map(lambda s: re.sub(r"[\s ]+", " ", to_hankaku(s)))
        df["電話番号"] = df["電話番号"].map(format_tel)
        df["郵便番号"] = df["郵便番号"].map(format_zip)
        df["メールアドレス"] = df["メールアドレス"].map(lambda s: to_hankaku(s).lower())
        df["会社名"] = df["会社名"].map(lambda s: to_hankaku(s).replace("(株)", "株式会社"))
        frames.append(df)
    
    out = pd.concat(frames, ignore_index=True)
    before = len(out)
    out = out.drop_duplicates(subset="電話番号", keep="first")   # 電話番号で名寄せ
    out.to_csv("整形済み顧客リスト.csv", index=False, encoding="utf-8-sig")
    print(f"{before}件 → {len(out)}件(重複 {before - len(out)}件を削除)")