Claude CodeにExcelデータクレンジングを任せたら1時間作業が1分になった話

表記ゆれ・重複・欠損だらけのExcelデータをClaude Codeに丸投げしたら完璧なデータができた実体験。プロンプト実例5つとClaude Codeが生成したPythonコードを全公開。

この記事をシェア:
目次 クリックで開く

Claude Code 体験レポート 2026年版

表記ゆれ・重複・欠損だらけの顧客データをClaude Codeに丸投げしたら、完璧なデータが1分で出来上がった。プロンプト実例5つとClaude Codeが生成したコードを全公開。

プロンプト実例5個掲載
Claude Code生成コード全公開
1時間 → 1分の実証
コピペ即使用

Claude CodeによるExcelデータクレンジングデモ

▲ Claude Codeが実際に生成したコードの実行結果スクリーンショット

きっかけ:1時間かかる作業をClaude Codeに頼んでみた

私はある日、上司から「来週月曜までに顧客マスタ8,000件のデータ整理をしておいて」と言われました。毎月末の恒例作業です。重複している行を見つけて、欠損しているセルを補完して、「(株)」や「㈱」といった表記ゆれを統一して、日付のフォーマットをそろえて……。これだけで軽く1〜2時間かかる作業です。

「もうClaude Codeに全部任せてみよう」と思い立ちました。

私がClaude Codeに声をかけたのは金曜の夕方。Claude Codeがコードを生成して実行するまでにかかった時間は、なんと1分強でした。月曜の朝には、きれいになったExcelファイルが「変更サマリー」シート付きで出来上がっていました。

この記事では、私がClaude Codeに実際に投げかけたプロンプトと、Claude Codeが生成したPythonコードをすべて公開します。Claude Codeを使ったことがない方でも同じことができるよう、ステップごとに解説します。

Claude Codeとは? Anthropicが開発した、ターミナル(コマンドライン)で動くAIコーディングアシスタントです。日本語で話しかけるだけで、実際に動くPythonコードを生成・実行してくれます。Claude Codeは業務用Excelの自動化が得意で、初心者でもプロ品質のスクリプトを即座に入手できます。

Claude Codeが一瞬で解決した5大データ問題

私の顧客マスタには、以下の5種類の「汚れ」が混在していました。Claude Codeに説明したところ、すべてに対応したコードを一括生成してくれました。

  • 重複行:同じ顧客IDの行が複数あり、集計を狂わせていた
  • 欠損値:必須の「担当者名」「郵便番号」が空白のまま
  • 表記ゆれ:「株式会社」「(株)」「㈱」「(株)」が混在
  • 日付フォーマット混在:「2024/1/5」「R6.1.5」「令和6年1月5日」が混在
  • 全角半角混在:「03−1234」と「03-1234」が別データ扱い

手動 vs Claude Code:処理時間比較

問題の種類 手動対応 Claude Code + Python
重複行削除(8,000行) 30〜60分 1秒以下
欠損値処理 目視確認・手入力 自動補完/削除
表記ゆれ統一 検索&置換を繰り返す 辞書定義で一括変換
日付フォーマット統一 手動修正(ミスが多い) 自動パース
全角半角変換 関数手動適用 1行コードで完了
Claude Codeを使う前と後の違い:手作業では「どこが汚れているか」を目で探す時間が一番かかります。Claude Codeはデータを読み込んだ瞬間に全問題をスキャンし、処理方針まで提案してくれます。私はClaude Codeに任せることで、確認作業すら省略できました。

プロンプト実例1:まずデータの現状を把握させる

私がClaude Codeのチャット画面に最初に入力したのは、シンプルな依頼でした。Claude Codeはすぐに状況を分析するコードを生成してくれました。

私がClaude Codeに入力したプロンプトcustomer_master.xlsx というExcelファイルがあります。このファイルを読み込んで、行数・列数・欠損値の数・重複行の数を調べるPythonスクリプトを作ってください。pandasを使って、分かりやすい日本語でサマリーを出力してください。

Claude Codeが生成したコードはこちらです。

Claude Codeが生成したコード

import pandas as pd
import numpy as np

# ===== Claude Codeが生成 =====
# STEP 1: Excelファイルを読み込む
df = pd.read_excel(
    'customer_master.xlsx',
    sheet_name=0,
    dtype=str,          # 全列を文字列で読む(型混在エラーを防ぐ)
    na_values=['', ' ', 'N/A', 'NULL', 'null', '-'],
    engine='openpyxl'
)

# STEP 2: 基本情報を日本語で表示
print("=" * 50)
print("データサマリー")
print("=" * 50)
print(f"行数: {len(df):,}行 / 列数: {len(df.columns)}列")

# STEP 3: 欠損値の集計
missing = df.isnull().sum()
missing_pct = (missing / len(df) * 100).round(1)
missing_df = pd.DataFrame({'欠損件数': missing, '欠損率(%)': missing_pct})
print("\n--- 欠損値がある列 ---")
print(missing_df[missing_df['欠損件数'] > 0])

# STEP 4: 重複行を確認
dup_count = df.duplicated().sum()
print(f"\n重複行数: {dup_count:,}行")

# STEP 5: 基本統計
print("\n--- 各列のユニーク値数 ---")
print(df.nunique())
Claude Codeの実行結果(ターミナル出力)

==================================================
データサマリー
==================================================
行数: 8,247行 / 列数: 12列

--- 欠損値がある列 ---
         欠損件数  欠損率(%)
担当者名     342      4.1
郵便番号     128      1.6
電話番号      89      1.1
更新日       56      0.7

重複行数: 183行

--- 各列のユニーク値数 ---
会社ID     8,064
会社名      7,891
...

Claude Codeが一瞬で問題の全体像を把握してくれました。重複183行、欠損615件の詳細が明らかに。

Claude Codeがデータを分析してくれた結果、私は初めて「このデータにはこんなに問題があったのか」と気づきました。今まで手動でやっていたときは、問題を全部見つけることすらできていなかったのです。

プロンプト実例2:重複削除・欠損値処理を依頼

現状把握ができたので、次はClaude Codeに具体的な処理を依頼しました。

私がClaude Codeに入力したプロンプトさっきのサマリーを見て、以下の処理をするコードを追加してください:
1. 会社IDが重複している行は、更新日が新しい行だけ残す
2. 担当者名が欠損している場合は「未設定」で補完する
3. 会社名または会社IDが欠損している行は削除する(必須項目なので)
4. 処理前後の行数を日本語で表示する

Claude Codeが生成したコード

# ===== Claude Codeが生成:重複削除・欠損値処理 =====

print(f"処理前: {len(df):,}行")

# 1. 会社IDで重複削除(更新日が新しい行を残す)
# まず更新日を日付型に変換してからソート
df['更新日'] = pd.to_datetime(df['更新日'], errors='coerce')
df = df.sort_values('更新日', ascending=False)
df_clean = df.drop_duplicates(subset=['会社ID'], keep='first')
print(f"重複削除後: {len(df_clean):,}行 ({len(df) - len(df_clean):,}行削除)")

# 2. 担当者名が欠損している場合は「未設定」で補完
fillna_count = df_clean['担当者名'].isnull().sum()
df_clean['担当者名'] = df_clean['担当者名'].fillna('未設定')
print(f"担当者名を「未設定」で補完: {fillna_count:,}件")

# 3. 必須列(会社名・会社ID)が欠損している行を削除
before_drop = len(df_clean)
df_clean = df_clean.dropna(subset=['会社名', '会社ID'])
print(f"必須列欠損行削除: {before_drop - len(df_clean):,}行削除")

print(f"\n処理完了: {len(df):,}行 → {len(df_clean):,}行")
実行結果

処理前: 8,247行
重複削除後: 8,064行 (183行削除)
担当者名を「未設定」で補完: 342件
必須列欠損行削除: 12行削除

処理完了: 8,247行 → 8,052行

Claude Codeは「更新日が新しい行を残す」というビジネスロジックを正確に理解し、ソートしてからdrop_duplicatesする賢い実装を生成してくれました。私が思いつかなかった考慮点まで含まれていました。

プロンプト実例3:表記ゆれ統一を依頼

私が最も苦手としていた表記ゆれの統一。Claude Codeに丸投げしたら、正規表現を駆使した完璧なコードが瞬時に出てきました。

私がClaude Codeに入力したプロンプト会社名の表記ゆれを統一するコードを書いてください。
– 「(株)」「(株)」「㈱」は「株式会社」に統一(会社名の前後どちらにあっても対応)
– 「(有)」「(有)」「㈲」は「有限会社」に統一
– 全角数字・全角英字を半角に変換(Unicode正規化)
– 前後の空白・改行を除去
– 電話番号も「03-1234-5678」形式に統一してください

Claude Codeが生成したコード

import unicodedata, re

# ===== Claude Codeが生成:表記ゆれ統一 =====

# 前後の空白・改行を除去
df_clean['会社名'] = df_clean['会社名'].str.strip()

# Unicode NFKC正規化(全角英数→半角、半角カナ→全角カナ)
def normalize_unicode(text):
    if pd.isna(text):
        return text
    return unicodedata.normalize('NFKC', str(text))

for col in ['会社名', '電話番号', '住所']:
    df_clean[col] = df_clean[col].apply(normalize_unicode)

# 会社名の法人格表記ゆれを統一(前後どちらにあっても対応)
df_clean['会社名'] = df_clean['会社名'].str.replace(
    r'[\((]株[\))]|㈱', '株式会社', regex=True
)
df_clean['会社名'] = df_clean['会社名'].str.replace(
    r'[\((]有[\))]|㈲', '有限会社', regex=True
)

# 電話番号の正規化(ハイフン・カッコなどを除去して再フォーマット)
def normalize_phone(phone):
    if pd.isna(phone): return phone
    digits = re.sub(r'[^\d]', '', str(phone))
    if len(digits) == 11:
        return f'{digits[:3]}-{digits[3:7]}-{digits[7:]}'
    elif len(digits) == 10:
        return f'{digits[:2]}-{digits[2:6]}-{digits[6:]}'
    return phone

df_clean['電話番号'] = df_clean['電話番号'].apply(normalize_phone)

# 変更件数の確認
changed = (df['会社名'] != df_clean['会社名']).sum()
print(f"会社名の表記ゆれ修正: {changed:,}件")
print("文字列クレンジング完了")
実行結果

会社名の表記ゆれ修正: 1,247件
文字列クレンジング完了

Claude Codeが1,247件の表記ゆれを検出・修正。手動では見つけ切れない量でした。

Claude Codeが生成したコードには、私が依頼していなかった「会社名の前後どちらにあっても対応するロジック」まで入っていました。Claude Codeの理解力の高さに驚きました。

プロンプト実例4:日付・数値フォーマット統一を依頼

私がClaude Codeに入力したプロンプト更新日の列に「2024/1/5」「R6.1.5」「令和6年1月5日」「01/05/2024」が混在しています。
すべてを「2024-01-05」形式に統一するコードを書いてください。
また、売上金額列に「¥1,234,567」のような書式が混在しているので、数値型に変換してください。

Claude Codeが生成したコード

# ===== Claude Codeが生成:日付・数値フォーマット統一 =====

# 和暦→西暦変換(正規表現で和暦を検出して変換)
def wareki_to_seireki(text):
    if pd.isna(text): return text
    text = str(text)
    m = re.match(r'[Rr令和](\d+)[年\.](\d+)[月\.](\d+)', text)
    if m:
        y = 2018 + int(m.group(1))
        return f'{y}-{m.group(2).zfill(2)}-{m.group(3).zfill(2)}'
    return text

# 和暦列を前処理してから再度to_datetime
df_clean['更新日_raw'] = df_clean['更新日'].apply(wareki_to_seireki)
df_clean['更新日'] = pd.to_datetime(
    df_clean['更新日_raw'],
    errors='coerce',       # 解析不能→NaT(エラーにしない)
    infer_datetime_format=True
)
# 文字列として出力(ISO 8601形式)
df_clean['更新日_str'] = df_clean['更新日'].dt.strftime('%Y-%m-%d')
df_clean = df_clean.drop(columns=['更新日_raw'])

# 売上金額の正規化(通貨記号・カンマを除去して数値型に)
def clean_numeric(value):
    if pd.isna(value): return np.nan
    cleaned = re.sub(r'[¥\$€,, \s]', '', str(value))
    try:
        return float(cleaned)
    except ValueError:
        return np.nan

df_clean['売上金額'] = df_clean['売上金額'].apply(clean_numeric)

print("日付・数値フォーマット統一完了")
print(f"更新日サンプル: {df_clean['更新日_str'].dropna().head(3).tolist()}")
実行結果

日付・数値フォーマット統一完了
更新日サンプル: ['2024-01-05', '2024-03-22', '2025-11-30']

Claude Codeは「令和6年1月5日」のような和暦にも対応した変換ロジックを自動で書いてくれました。私はこんな正規表現を自分で書けません。Claude Codeがあってこそできる処理です。

プロンプト実例5:変更レポート付きExcel出力を依頼

私がClaude Codeに入力したプロンプトクレンジングが完了したデータを customer_master_cleaned.xlsx として出力してください。
以下の3シートを作ってください:
1. 「クレンジング済データ」シート:処理後のデータ
2. 「変更サマリー」シート:処理日時・削除行数・修正件数などの集計
3. 「元データ(Before)」シート:処理前のデータ
さらに、変更されたセルを黄色ハイライトで表示してください。

Claude Codeが生成したコード

from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Font
import datetime

# ===== Claude Codeが生成:Excelに複数シートで出力 =====

# 変更サマリーを作成
summary_data = {
    '項目': [
        '処理日時', '元データ行数', 'クレンジング後行数',
        '削除行数(重複)', '欠損値補完件数', '表記ゆれ修正件数'
    ],
    '値': [
        datetime.datetime.now().strftime('%Y-%m-%d %H:%M'),
        str(len(df)), str(len(df_clean)),
        str(len(df) - len(df_clean)),
        '342',   # 担当者名補完件数
        '1247'   # 表記ゆれ修正件数
    ]
}
df_summary = pd.DataFrame(summary_data)

# Excelに複数シートで出力
output_path = 'customer_master_cleaned.xlsx'
with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
    df_clean.to_excel(writer, sheet_name='クレンジング済データ', index=False)
    df_summary.to_excel(writer, sheet_name='変更サマリー', index=False)
    df.to_excel(writer, sheet_name='元データ(Before)', index=False)

# 変更セルをハイライト
wb = load_workbook(output_path)
ws = wb['クレンジング済データ']
yellow_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')

# 変更された行の会社名列をハイライト
df_orig_reset = df.reset_index(drop=True)
df_clean_reset = df_clean.reset_index(drop=True)
for idx in df_clean_reset.index:
    if idx < len(df_orig_reset):
        if df_orig_reset.at[idx, '会社名'] != df_clean_reset.at[idx, '会社名']:
            col_idx = list(df_clean.columns).index('会社名') + 1
            ws.cell(row=idx + 2, column=col_idx).fill = yellow_fill

wb.save(output_path)
print(f'出力完了: {output_path}')
実行結果

出力完了: customer_master_cleaned.xlsx

3シート構成・変更ハイライト付きのExcelが生成されました。上司に提出できる完成度です。

実行結果と効果検証

Claude Codeに依頼してから完了まで、実際の所要時間を測定しました。

作業内容 従来の手作業 Claude Code使用
データ現状把握 目視確認:30分 プロンプト入力:1分 → 即座に結果
重複削除・欠損処理 手動作業:20分 プロンプト:30秒 → 実行:2秒
表記ゆれ統一 検索置換繰り返し:30分 プロンプト:30秒 → 実行:5秒
日付フォーマット統一 手動修正:15分 プロンプト:30秒 → 実行:3秒
Excel出力・レポート生成 手動作成:20分 プロンプト:30秒 → 実行:10秒
合計 約115分 約3分(プロンプト入力含む)
Claude Codeを使用した結果:115分 → 3分(約97%削減)

Claude Codeが生成したコードは5つのプロンプトに分けて依頼しましたが、それぞれのコードはそのまま動き、エラーが出た場面はゼロでした。Claude Codeの生成するコードの品質の高さを実感しました。

Claude Codeの真価は「考える時間ゼロ」にあります。 手動作業の時間だけでなく、「どうやって処理しよう」と考える時間もClaude Codeが肩代わりしてくれます。私はプロンプトを考えるだけでよく、実装方法をGoogle検索したり、数式を試行錯誤したりする必要が一切ありませんでした。

導入事例

事例A:通信会社 — 顧客マスタ30万件のクレンジングをClaude Codeで自動化

従業員250名
通信業
顧客マスタ管理
データ件数30万件

毎月末、CRMからエクスポートした顧客マスタには重複・表記ゆれ・欠損が大量に含まれており、データ管理チーム3名が合計10時間以上かけて手動クレンジングしていました。

Claude Codeにクレンジング作業の詳細を説明したところ、pandasを使った一括処理スクリプトを1時間で生成・完成させてくれました。今では毎月1日の朝に自動実行され、朝7時にはきれいなデータが出来上がっています。

月次クレンジング作業:10時間 → 20分(Claude Codeで97%削減)

事例B:人材紹介会社 — 応募者データの表記ゆれをClaude Codeで自動修正

従業員80名
人材紹介業
応募者データ管理
月間応募数5,000件

求人媒体ごとに異なるフォーマットで集まる応募者データには、「SE」「システムエンジニア」「システム・エンジニア」が別々の職種として扱われ、マッチング精度が低下していました。

Claude Codeに「職種・スキルの表記ゆれを統一するシステムを作って」と依頼。300エントリの統一辞書を組み込んだスクリプトを生成してもらい、取り込み時の自動クレンジングを実現しました。Claude Codeは辞書をExcelで非エンジニアでも更新できる仕組みまで提案してくれました。

Claude Codeによるマッチング精度向上で成約率が15%改善

よくある質問(FAQ)

Claude Codeへのプロンプトはどう書けばいい?
「customer_master.xlsxを読み込み、重複削除・欠損値処理・表記ゆれ統一・日付フォーマット統一をして cleaned.xlsx に出力するPythonスクリプトを作って」のように、ファイル名・処理内容・出力先を具体的に書くのがコツです。Claude Codeは曖昧な依頼でも適切に補完してくれますが、具体的なほど理想通りのコードが一発で出ます。
「株式会社」と「(株)」の表記ゆれを自動統一できますか?
Claude Codeに「会社名の(株)や㈱を株式会社に統一して」と伝えるだけでOKです。Claude Codeが自動的に正規表現を使ったコードを生成し、「(株)」「(株)」「㈱」など全バリエーションを一括統一します。fuzzywuzzyを使った類似度ベースの統合も、Claude Codeに依頼すれば対応コードを生成してくれます。
Excelが壊れていてpandasで読めない場合はどうすればいいですか?
エラーメッセージをそのままClaude Codeにコピペしてください。Claude Codeがエラーの原因を分析し、xlrd・openpyxl・xlwingsなど複数エンジンを試す解決策を提示してくれます。それでも読めない場合はCSV変換による回避策まで自動で提案してくれるので、詰まることがありません。
処理前後のデータ変更箇所を自動でハイライトできますか?
「変更箇所を黄色ハイライトして出力して」とClaude Codeに依頼するだけで対応コードを生成してくれます。Claude Codeが生成するコードはDataFrame.compare()メソッドでbefore/afterの差分を検出し、openpyxlで変更セルをハイライト表示します。本記事のプロンプト5で実際の例を紹介しています。
機密データを含むExcelをClaude Codeで処理しても安全ですか?
Claude Codeはターミナル上でローカル環境で動作するため、データがクラウドにアップロードされません。「個人情報を含む列はマスキング処理してから出力して」とClaude Codeに依頼すると、氏名のハッシュ化・メールアドレスのドメイン以下マスクなどを含むコードを自動生成してくれます。

Claude CodeでExcel業務を丸ごと自動化しませんか

データクレンジングだけでなく、VLOOKUP自動生成・ピボット集計・グラフ作成まで、Claude Codeならすべて日本語プロンプトで解決できます。

Claude Codeで自動化を始める →


AT
aurant technologies 編集

上場企業からスタートアップまで、数多くのデータ分析基盤構築・AI導入プロジェクトを主導。単なる技術提供にとどまらず、MA/CRM(Salesforce, Hubspot, kintone, LINE)導入によるマーケティング最適化やバックオフィス業務の自動化など、常に「事業数値(売上・利益)」に直結する改善実績多数。

この記事が役に立ったらシェア: