Claude DesktopのCoworkでエクセルファイル内のデータを分析してみた

Claude DesktopのCoworkでエクセルファイル内のデータを分析してみた

エクセルファイル内のデータに対してもClaude DesktopのCowork機能を使ってスモールスタートで分析ができました。よりデータに特化した基盤が必要なケースについても紹介します。
2026.04.13

データ事業本部の鈴木です。
AIエージェントは非常に強力なツールで、さまざまな業務を格段に速く行えるようになりました。
今回はClaude DesktopのCoworkでエクセルレポートの内容を抽出・追加分析してもらってみたのでご紹介します。

背景

AIエージェントが登場したことで、今まではなかなか自動化できず手動で行なっていたものの、効率化のヒントが見えてきた業務が多くあるのではないでしょうか。
エクセルの分析も1例に挙がると思います。スポットの分析なら手元にデータがあれば、エクセルを駆使してすぐに簡単な加工や可視化を行うことができます。
一方で、エクセルはデータが横持ちになりがちであったり、それ自体がレポートとなっていて、処理したいデータがシートの中途半端な位置から始まっていたりなど、追加の分析をしたくなった場合にはどうしてもプログラム化がしづらかったのではないでしょうか。

あるべき論で言えば、新規の分析をしたい場合、そもそもエクセルレポートのデータソースになっているデータソースからETLジョブでデータ分析用のシステムにデータを送り、レポートのためのBIツールやAIツールから利用するのが良いです。
ただ、いくら様々なツールがクラウドやSaaSで誰でも簡単に利用できるようになったとは言え、多少の準備期間や費用はかかりますし、その有効性を示すためにもまずは試しに分析をしたい場面はよくあると思います。

今回はそのようなケースを想定して、Claude Desktopの「Cowork」でどの程度のエクセルファイルなら処理可能かの肌感を紹介しつつ、データ分析基盤と組み合わせるとどんな棲み分けになるかを紹介します。

なお、Cowork機能については以下が参考になります。

https://dev.classmethod.jp/articles/claude-desktop-cowork/

準備

まずは分析対象とするエクセルのサンプルレポート作成と、検証に必要なClaude Desktopの設定を紹介します。

サンプルレポート

今回は以下のように1ヶ月ごとのなにかの製品の品番ごとの売上個数レポートを作成しました。
※内容はGPT-5.4に作ってもらったダミーデータです。

処理対象のエクセルファイル

ポイントとして、このレポートは単純なシートではなく、今回Claudeで処理したいデータはシートの途中にあります。また、週単位の売上の表もごく近くにあります。

処理対象の箇所

エクセルファイル中のシートはこの1枚です。複数シートあるエクセルファイルを分析することも想定されますが、その場合はプロンプトでどんなデータがどのシートにあるかくらいは指定すると思うので、今回の条件でも十分と考えました。

同じレイアウトで値や日数は異なるものを2026/1 ~ 2026/3まで作成しました。

用意したカレンダーデータ

Claude Desktopの設定

必須ではないですが、Claudeが処理対象のレポートがあるディレクトリを操作できるよう、filesystemMCPサーバーを設定しました。
また、後述するDuckDBも試したかったので、duckdbMCPサーバーも設定しました。
以下のようにclaude_desktop_config.jsonを変更しました。
各種パスは自身のものに置き換えてください。

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "レポートがあるディレクトリパス"
      ]
    },
    "duckdb": {
      "command": "uvx",
      "args": [
        "mcp-server-motherduck",
        "--db-path",
        "ローカルのDBファイルパス"
      ]
    }
  },
  ...他の設定...
 }

特にserver-filesystemは以下も参考になりました。

https://dev.classmethod.jp/articles/free-claude-desktop-filesystem-mcp-setup/

やってみた

ローカル上のサンプルレポートをデータソースに、Claudeで内部的にPythonを書かせて分析する例と、DuckDBというノートパソコンなどでも実行可能な列指向RDBMSをClaudeと組み合わせて使う例を試してみます。

1. エクセルレポートを直接処理する例

まずはエクセルレポートを直接処理する例を実施してみました。

Coworkを開き、レポートのあるディレクトリを指定し、エクセル売上レポートフォルダ内のエクセルレポート内の売上実績値から、TB-2104-BKの2026年1,2,3月の総売上個数推移を見たい。のプロンプトで問い合わせをしました。モデルはSonnet 4.6を使いました。

エクセルレポートを直接処理するプロンプト

以下のように分析を行い、回答および新規のエクセルファイルに分析をまとめてくれました。

分析実行過程

作成されたエクセル結果は以下のようになります。いい感じですね!

作成された分析レポート

特に気になるエクセルからの読み込みは、以下のようにPythonスクリプトでエクセルファイルを解析していました。

python3 << 'EOF'
import os, pandas as pd

base = '/sessions/gracious-inspiring-darwin/mnt/'
folder = None
for f in os.listdir(base):
    if 'エクセル' in f:
        folder = os.path.join(base, f)
        break

months = {
    '2026-01': '売上レポート202601.xlsx',
    '2026-02': '売上レポート202602.xlsx',
    '2026-03': '売上レポート202603.xlsx',
}

results = {}

for month_key, fname in months.items():
    path = os.path.join(folder, fname)
    df = pd.read_excel(path, sheet_name=0, header=None)

    # ヘッダー行を探す(「売上日」が含まれる行)
    header_row = None
    tb_col = None
    for i, row in df.iterrows():
        for j, val in row.items():
            if val == '売上日':
                header_row = i
                break
        if header_row is not None:
            break

    # 品番列のインデックスを特定
    header = df.iloc[header_row]
    for j, val in header.items():
        if val == 'TB-2104-BK':
            tb_col = j
            break

    print(f"{month_key}: header_row={header_row}, TB-2104-BK col={tb_col}")

    # データ行を抽出
    data = df.iloc[header_row+1:].copy()
    date_col = header[header == '売上日'].index[0]

    # 日付列と売上列を取得
    dates = pd.to_datetime(data.iloc[:, date_col], errors='coerce')
    sales = pd.to_numeric(data.iloc[:, tb_col], errors='coerce')

    valid = dates.notna() & sales.notna()
    total = int(sales[valid].sum())
    daily_data = list(zip(dates[valid].dt.strftime('%Y-%m-%d'), sales[valid].astype(int)))

    results[month_key] = {'total': total, 'daily': daily_data}
    print(f"  月間合計: {total}個")
    print(f"  日次データ件数: {len(daily_data)}")

print("\n=== 月次推移サマリー ===")
for month, data in results.items():
    print(f"{month}: {data['total']}個")
EOF

確かにこういったスクリプトを書けばこのエクセルから該当箇所を抜き出して処理することが可能です。人間だとこのような細かなファイル操作のスクリプトを書くのに結構時間がかかってしまいますが、一瞬で書けてしまうのはAIの強みですね。

今回使ったサンプルのエクセルファイルくらいであれば、Claudeにお願いするだけで大体の分析はできそうです。これより複雑なエクセルファイルや、データ量が非常に多い場合は難しいこともありそうです。

また、Pythonスクリプトを読むと、プロンプトで指定した特定の品番を手がかりにデータを読み取っています。ほかの品番の質問をすると、生成するスクリプトは変わりそうです。
この処理の汎用性は使うモデルや会話履歴にもよると思いますが、考え方としてはプロンプトごとに毎回ゼロから行われると思うのが良さそうです。

2. DuckDBを使う例

①エクセルからのデータ抽出と整然データ化

先の例だとプロンプトに応じた書き捨てのPythonスクリプトをClaudeが書いてエクセルファイルからデータを取得・集計してくれましたが、もう少しSQLも交えて汎用的に寄せたい場合は、DuckDBも便利です。

https://duckdb.org/

エクセルだと、今回のレポート例のように横持ちで持つことが多いですが、SQLで分析する場合、整然データと呼ばれる縦持ちの形にした方がかなり簡潔に処理を表現できます。

https://dev.classmethod.jp/articles/tidy-or-messy-to-bi/

簡潔にSQLをかけた方がトークン数削減や処理速度アップに繋がりやすいです。

まずは整然データに加工するため、スキルを作成しました。
※流れが若干唐突ですが、直前に一度試してみて、処理を使い回ししたいなと思ったのでスキル化しました。

Claude DesktopからClaudeでクリエイティブにでスキルを作成しました。

スキル作成1

処理内容を伝えます。

スキル作成2

今回のタスクは難なくできて、スキルも作成されました。

スキル作成3

作成されたスキル

このスキルを使って、エクセル内からデータを抜き出し、整然形式に持ち直ししてもらいました。

データの持ち直し

整然データへの処理結果

②DuckDBでの分析

ここまでできると手動でDuckDBで分析できますが、せっかくなのでClaude Desktopから分析してもらいましょう。整然データはエクセル売上レポートCSVというディレクトリに配置されたとして、以下のように分析を依頼しました。

duckdb MCPサーバーでエクセル売上レポートCSV内のデータから、品番ごとの月単位の総売上個数が知りたいです。duckdbで直接CSVファイルからSELECTしてください。

以下のようにSQLで分析してくれました。縦持ちにした甲斐もあって、先ほどのPythonスクリプトに対して圧倒的に簡潔ですね。

DuckDBからの分析結果

データ分析基盤との棲み分け

データ向けのプラットフォームが必要になる背景

ここまでで、「データ分析ってエクセルとClaudeだけあれば良くない?」と思ってしまいます。もちろんPythonでデータ分析が済むような分析であれば十分な場合もありますが、より大きな規模も含む一般的なケースでは以下のような課題になります。

  • 分析対象のデータ量が多く、大きなコンピューティングリソースが必要
  • 複数の従業員で使うため、共通プラットフォームが必要
  • 固定のモニタリング観点があり、ダッシュボードの方が適している
  • 継続的に集計・分析を実行したい
  • ローカル環境上にデータを保存したくない

など...

こういった課題は現在ではクラウドデータウェアハウスを中核としたデータ分析基盤を構築することが一般的な解決策の一つになっており、AWSやGoogle Cloudを始めとした様々な製品があります。
私は直近ではSnowflakeをよく使っているため、ここではSnowflakeを念頭に説明します。

ざっくりとしたデータ活用までの道筋を以下のように図示しました。今回はバッチ処理を念頭にメダリオンアーキテクチャを想定しました。

活用までの流れ

メダリオンアーキテクチャは大きく3つの層から構成されます。
まず業務データベースから分析したいデータを取り出してデータウェアハウスに取り込んだものがブロンズ層、クレンジングや標準化・重複排除・整合性確認などを行ったキュレーション済みのものがシルバー層、プロジェクト向けに分析しやすいよう非正規化や集計が行われたものがゴールド層です。

今回Claudeで行なったサンプルレポートは、「業務データベースのデータを、手動や業務アプリを使ってレポート化して取得したもの」をイメージしています。つまりかなり後工程の成果物をClaudeで処理しました。
より様々なデータ分析を継続的に業務データを元に行う場合、業務データベースや業務アプリの役割や負荷が重くなってしまうため、上記のようなデータ向けの仕組みの導入が求められます。

Snowflakeを例にネイティブのデータ活用機能と比較

例えばSnowflakeではネイティブのリモートMCPサーバーがあり、Claudeがデータを使えるように設定することもできます。ネイティブのAI機能もあり、よりSnowflake内のデータを活用するのに特化したCortex Agentsというエージェント機能があります。この機能もMCPサーバー経由で利用できます。

https://dev.classmethod.jp/articles/claude-desktop-to-cortex-agent-via-managed-mcp-server/

Snowflake IntelligenceというCortex Agents向けのSnowflakeネイティブのUIも用意されています。

https://www.snowflake.com/ja/developers/guides/getting-started-with-snowflake-intelligence-ja/

また、Cortex Codeという機能も提供されており、自然言語でSnowflake内のデータ分析やコード生成、操作も可能です。

https://dev.classmethod.jp/articles/snowflake-cortex-code-cli-release/

ここまで、AIエージェントの紹介が多くなりましたが、既存のBI機能が不要になった訳ではなく、目的に応じて合わせて使うのが良いと考えています。こちらについては以下で紹介しました。

https://dev.classmethod.jp/articles/snowflake-ai-data-meetup-west-20260326-lt3/

SnowflakeではStreamlit in Snowflakeという機能があり、Pythonスクリプトで定義したデータアプリを構築できます。Pythonといっても、Cortex Codeもあるため実装自体はかなり簡単になりましたが、ノーコーディングが望ましい場合は別途BIツールが必要かもしれません。

最後に

Claude DesktopのCoworkを使って、エクセルレポート内のデータに対する分析が可能か確認しました。また、Claude Desktopでカバーできるケースとデータ分析基盤が必要になるケースについても比較しました。参考になりましたら幸いです。

この記事をシェアする

関連記事