VSCode×MCPでExcel作業を自動化!VBAよりも簡単な方法
こんにちは!YaroTechです。
「毎月同じExcel作業で2時間も使ってる…」
「VBAを勉強したいけど、なんだか難しそう…」
「Pythonって聞いたことあるけど、プログラミングは苦手…」
そんな悩みを抱えていませんか?
今日は、VBAを覚えなくても、VSCodeとMCPを使ってExcel作業を自動化する方法をご紹介します。実際に月次売上レポートの作成時間を2時間→5分に短縮できた実例を交えながら、具体的な手順をお伝えしますね。
※本記事の音声解説(日本語、英語)および動画解説(日本語、英語)を下記につけてますので場所やデバイスに応じてご利用ください。
音声解説
※上記、音声解説の作り方については下記記事をご参考ください。
動画解説
1.日本語で解説
2.Video explanation(English)
※上記、動画解説の作り方については下記記事をご参考ください。
🖥️ 動作確認環境
まず最初に、私の実行環境をお伝えします(技術記事では環境の違いで動かないことがよくあるので):
PC: Microsoft Surface Laptop 7th(Snapdragon X Elite / ARM64)
OS: Windows 11 Pro 24H2(ARM64版)
VS Code: v1.91.0(ARM64ネイティブ)
Python: 3.12.3(Microsoft Store版)
Excel: Microsoft Office Home and Business 2021
Claude Desktop: v0.7.1(MCP有効)
必要なPythonパッケージ
pip install pandas openpyxl xlsxwriter matplotlib※ARM版Windowsでも全て正常動作します。x64版Windowsでも同様に動作確認済みです。
※Pythonパッケージインストールの際に下記画像のようなWARNINGが出ていると不安になりますが、「Successfully installed」になっていれば問題なく動作します。

🎯 この記事で得られること
VBAを学ばずにExcel自動化を始める方法
売上データの集計からグラフ作成まで自動化する手順
MCPを使った定期実行の仕組み
エラーが出た時の対処法
📊 実際の成果
Before: 月次売上レポート作成に毎月2時間以上
複数のCSVファイルを手動で開く
コピー&ペーストで集計
グラフを手動で作成・更新
After: わずか5分で完了!
ボタン一つで全自動処理
グラフも自動生成
ミスがゼロに
削減時間: 月24時間 → 年間288時間の効率化!
[ここにBefore/Afterの比較画像を挿入]
🚀 実践内容
1. なぜVBAよりPython?3つの理由
まず、なぜVBAではなくPythonを選ぶのか、簡単に説明しますね。
理由1: 学習のハードルが低い
# Pythonの場合(直感的!)
import pandas as pd
df = pd.read_excel('売上データ.xlsx')
合計 = df['売上'].sum()
# VBAの場合(覚えることが多い…)
Dim wb As Workbook
Set wb = Workbooks.Open("売上データ.xlsx")
Dim sum As Double
sum = Application.WorksheetFunction.Sum(Range("B:B"))理由2: エラーメッセージが分かりやすい
Pythonは日本語のエラー解説も豊富で、初心者でも解決しやすいんです。
理由3: AIとの相性が抜群
Claude Desktopに「売上データを集計して」と伝えるだけで、MCP filesystemでコードを書いてくれます!
2. 実際にやってみよう!売上データの自動集計
では、実際に月次売上レポートを自動化してみましょう。

下記Step2の実行ではVS Codeを使用しています。「.py」ファイルを右クリックして「VS Code(アイコン)開く」を押して、右上の「再生ボタン▷」で実行できます。

Step 1: サンプルデータの準備
まず、こんな売上データ(sales.csv)があるとします:
売上ID,商品ID,商品名,売上,日付
1,14,Product N,8477.97,2024-01-19 06:57:40
2,7,Product G,17281.77,2024-08-27 06:57:40
3,18,Product R,12480.30,2024-01-21 06:57:40
...Step 2: Pythonで集計処理
import pandas as pd
import matplotlib.pyplot as plt
import openpyxl
from datetime import datetime
import warnings
import os
warnings.filterwarnings('ignore')
# スクリプトのディレクトリに移動
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir)
print(f"作業ディレクトリ: {os.getcwd()}")
# 日本語フォントの設定(Windows用)
plt.rcParams['font.sans-serif'] = ['MS Gothic']
plt.rcParams['axes.unicode_minus'] = False
# 開始時刻を記録
start_time = datetime.now()
print("売上データの処理を開始します...")
# CSVファイルを読み込む
df = pd.read_csv('sales.csv', encoding='utf-8-sig')
print(f"✓ CSVファイルを読み込みました: {len(df)}件のデータ")
# カラム名を確認
print(f"カラム: {df.columns.tolist()}")
# 日付をdatetime型に変換
df['日付'] = pd.to_datetime(df['日付'])
# 日付から年月を抽出
df['年月'] = df['日付'].dt.to_period('M')
# 商品別の売上集計
product_summary = df.groupby('商品名')['売上'].sum().sort_values(ascending=False).head(10)
print("\n商品別売上集計(上位10商品):")
for product, sales in product_summary.items():
print(f" {product}: {sales:,}円")
# 日別の売上推移
daily_sales = df.groupby(df['日付'].dt.date)['売上'].sum()
# 月別の売上推移
monthly_sales = df.groupby('年月')['売上'].sum()
# Excelファイルに出力
with pd.ExcelWriter('売上分析レポート.xlsx', engine='openpyxl') as writer:
# 商品別売上をシートに書き込み(全商品)
product_summary_all = df.groupby('商品名')['売上'].agg(['sum', 'count', 'mean']).sort_values('sum', ascending=False)
product_summary_all.columns = ['総売上', '販売回数', '平均売上']
product_summary_all.to_excel(writer, sheet_name='商品別売上')
# 日別売上をシートに書き込み
daily_sales.to_excel(writer, sheet_name='日別売上')
# 月別売上をシートに書き込み
monthly_sales.to_excel(writer, sheet_name='月別売上')
# 売上サマリーも追加
summary_df = pd.DataFrame({
'項目': ['総売上', '平均日次売上', '最高日次売上', '最低日次売上', '取引件数', '商品種類数'],
'値': [
f"{df['売上'].sum():,.2f}円",
f"{daily_sales.mean():,.2f}円",
f"{daily_sales.max():,.2f}円",
f"{daily_sales.min():,.2f}円",
f"{len(df)}件",
f"{df['商品名'].nunique()}種類"
]
})
summary_df.to_excel(writer, sheet_name='サマリー', index=False)
# 商品ランキングも追加
ranking_df = product_summary_all.reset_index()
ranking_df.index = ranking_df.index + 1
ranking_df.index.name = '順位'
ranking_df['総売上'] = ranking_df['総売上'].apply(lambda x: f'{x:,.2f}円')
ranking_df['平均売上'] = ranking_df['平均売上'].apply(lambda x: f'{x:,.2f}円')
ranking_df.to_excel(writer, sheet_name='商品ランキング')
print("✓ Excelファイルを作成しました: 売上分析レポート.xlsx")
# グラフも作成
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 10))
# 1. 商品別売上グラフ(上位10商品)
colors = plt.cm.tab10(range(10))
bars = ax1.bar(range(len(product_summary)), product_summary.values, color=colors)
ax1.set_xticks(range(len(product_summary)))
ax1.set_xticklabels(product_summary.index, rotation=45, ha='right')
ax1.set_title('商品別売上(上位10商品)', fontsize=14, pad=10)
ax1.set_xlabel('商品名')
ax1.set_ylabel('売上(円)')
ax1.grid(True, alpha=0.3, axis='y')
# 棒グラフの上に値を表示
for i, (bar, value) in enumerate(zip(bars, product_summary.values)):
ax1.text(bar.get_x() + bar.get_width()/2, value + max(product_summary.values)*0.01,
f'{value:,.0f}', ha='center', va='bottom', fontsize=9)
# 2. 日別売上推移グラフ
daily_sales.plot(ax=ax2, marker='o', linewidth=1.5, markersize=5, color='#FF6B6B')
ax2.set_title('日別売上推移', fontsize=14, pad=10)
ax2.set_xlabel('日付')
ax2.set_ylabel('売上(円)')
ax2.grid(True, alpha=0.3)
ax2.tick_params(axis='x', rotation=45)
# 3. 月別売上推移グラフ
monthly_sales_values = monthly_sales.values
monthly_sales_labels = [str(period) for period in monthly_sales.index]
bars = ax3.bar(range(len(monthly_sales)), monthly_sales_values, color='#4ECDC4')
ax3.set_xticks(range(len(monthly_sales)))
ax3.set_xticklabels(monthly_sales_labels, rotation=45, ha='right')
ax3.set_title('月別売上推移', fontsize=14, pad=10)
ax3.set_xlabel('年月')
ax3.set_ylabel('売上(円)')
ax3.grid(True, alpha=0.3, axis='y')
# 月別グラフにも値を表示
for i, (bar, value) in enumerate(zip(bars, monthly_sales_values)):
ax3.text(bar.get_x() + bar.get_width()/2, value + max(monthly_sales_values)*0.01,
f'{value:,.0f}', ha='center', va='bottom', fontsize=9)
# 4. 商品別売上構成比(円グラフ)
top5_products = product_summary.head(5)
other_sales = product_summary[5:].sum()
if other_sales > 0:
pie_data = pd.concat([top5_products, pd.Series([other_sales], index=['その他'])])
else:
pie_data = top5_products
# 色を設定
pie_colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FED766', '#2AB7CA', '#FE4A49']
wedges, texts, autotexts = ax4.pie(pie_data, labels=pie_data.index, autopct='%1.1f%%',
startangle=90, colors=pie_colors[:len(pie_data)])
ax4.set_title('商品別売上構成比(上位5商品)', fontsize=14, pad=10)
# 円グラフのテキストを見やすく
for text in texts:
text.set_fontsize(10)
for autotext in autotexts:
autotext.set_color('white')
autotext.set_fontsize(10)
autotext.set_weight('bold')
plt.tight_layout()
plt.savefig('売上分析グラフ.png', dpi=150, bbox_inches='tight')
print("✓ グラフを作成しました: 売上分析グラフ.png")
# 簡単な分析レポートも作成
print("\n" + "="*50)
print("売上分析サマリー")
print("="*50)
print(f"分析期間: {df['日付'].min().date()} ~ {df['日付'].max().date()}")
print(f"総売上: {df['売上'].sum():,.2f}円")
print(f"取引件数: {len(df)}件")
print(f"平均取引額: {df['売上'].mean():,.2f}円")
print(f"最も売れた商品: {product_summary.index[0]} ({product_summary.iloc[0]:,.2f}円)")
print()
# 月別の成長率を計算
if len(monthly_sales) > 1:
growth_rate = ((monthly_sales.iloc[-1] - monthly_sales.iloc[0]) / monthly_sales.iloc[0]) * 100
print(f"期間中の売上成長率: {growth_rate:+.1f}%")
# 商品別の売上分布を分析
print(f"\n売上上位3商品が占める割合: {(product_summary.head(3).sum() / df['売上'].sum() * 100):.1f}%")
# 処理時間を計算
end_time = datetime.now()
processing_time = (end_time - start_time).total_seconds()
print(f"\n処理完了!処理時間: {processing_time:.1f}秒")
print("\n作成されたファイル:")
print(" - 売上分析レポート.xlsx (5つのシート)")
print(" - 売上分析グラフ.png (4つのグラフ)")
print("="*50)上記コードをメモ帳に貼り付けて「sales_analysis.py」と名前を付けて「sales.csv」と同じフォルダに保存してください。
ポイント:
`pandas`でデータ処理が超簡単に
グラフも自動で生成される
エラーが出てもメッセージが分かりやすい
※VS Codeで実行する場合は「Python拡張機能」が必要になります。

(参考)生成AIに上記コードを作成してもらうためのプロンプト例
Pythonで売上データを分析するスクリプトを作成してください。
【背景】
毎月の売上データ分析を自動化したいです。現在はExcelで手作業で行っており、2時間かかっています。
【入力データ】
CSVファイル(sales.csv)のサンプル:
```csv
売上ID,商品ID,商品名,売上,日付
1,14,Product N,8477.97,2024-01-19 06:57:40
2,7,Product G,17281.77,2024-08-27 06:57:40
3,18,Product R,12480.30,2024-01-21 06:57:40
【入力ファイル】
- ファイル名: sales.csv
- エンコーディング: UTF-8 with BOM
- カラム構造:
- 売上ID: 整数
- 商品ID: 整数
- 商品名: 文字列(例: Product A)
- 売上: 小数(売上金額)
- 日付: 日時形式(例: 2024-01-19 06:57:40)
【実行環境】
- Windows 11
- Python 3.12
- 必要なライブラリ: pandas, matplotlib, openpyxl
【期待する出力】
1. Excelファイル(売上分析レポート.xlsx)に以下のシートを作成:
- 商品別売上集計
- 日別売上推移
- 月別売上推移
- サマリー情報
2. グラフ画像(売上分析グラフ.png)に以下を含む:
- 商品別売上の棒グラフ(上位10商品)
- 日別売上推移の折れ線グラフ
- 月別売上推移の棒グラフ
- 売上構成比の円グラフ
【追加要件】
- 日本語表示に対応(グラフも含む)
- 処理時間を表示
- エラーハンドリングを含める
- 実行時の進捗を表示ポイント:下記のような観点で具体的に書く(プロンプトも生成AIに作成してもらうとラクです)
どういう切り口で分析したいのか
PCの実行環境
どういう形式で出力させたいのか
作成するコードへの要望(例:日本語コメント記載、エラーが出ても処理止めない、など)
Step 3:自動作成されたグラフとエクセルを確認
「sales.csv」と同じフォルダに「売上分析グラフ.png」「売上分析レポート.xlsx」が出力されます。






3. MCPと連携して更に便利に!
ここからが本番です。MCPのファイル監視機能filesystemを使えば、CSVファイルが更新されたらClaude Desktopに一言頼んで処理が走るようにできます。
MCP設定(claude_desktop_config.json):
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"C:/Users/YourName/Documents/売上データ"
]
}
}
}これで、Claude Desktopから直接ファイルを操作できるようになります!
Claude Desktop MCP設定内の下記パスはfilesystemMCPに操作を許可するフォルダ(ディレクトリ)になります。複数個所設定したい場合はパスを複数書き込んでください。今回は「Documents」フォルダの中にある「売上データ」フォルダ内の操作を許可しています。
"C:/Users/YourName/Documents/売上データ"
※パスの”YourName”は皆さんのPC環境に合わせて変えてください。
※Claude Desktop MCP設定については下記記事でも触れています。
🔧 つまずいたポイントと解決策
エラー1: 文字化けが発生した
症状:
UnicodeDecodeError: 'utf-8' codec can't decode byte...原因:
CSVファイルの文字コードがShift-JISだった
解決策:
# これを
df = pd.read_csv('sales.csv')
# こうする
df = pd.read_csv('sales.csv', encoding='shift-jis')エラー2: グラフの日本語が表示されない
症状:
グラフの日本語部分が□□□になる
原因:
matplotlibのデフォルトフォントが日本語非対応
解決策:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['MS Gothic'] # Windows実測:この設定追加で、グラフ生成時間は0.1秒しか増えませんでした。
💡 応用例・活用アイデア
在庫管理: 発注点を下回ったら自動でアラート
顧客分析: 購買パターンを自動でレポート化
勤怠集計: タイムカードデータから月次集計表を自動作成
見積書作成: テンプレートに自動でデータを流し込み
※上記「応用例・活用アイデア」自動実行のキーワードは「バッチファイル」「Windowsタスクスケジューラー」です。その他にもあと3パターンの自動実行の方法があります(By Claude Desktop)。便利な世の中ですね!
📈 効果測定
実際に1ヶ月使ってみた結果:
作業時間: 120分 → 5分(95.8%削減)
ミス発生率: 月3〜4件 → 0件
レポート品質: グラフ付きで見やすさ向上
精神的負担: 「また月末か...」→「もう終わった!」
※上記「応用例・活用アイデア」で実行すると作業時間0分も夢じゃないです!

💬 まとめ
VBAを覚えなくても、VSCodeとPython、そしてMCPを組み合わせることで、Excel作業を大幅に効率化できます。最初は少し戸惑うかもしれませんが、一度仕組みを作ってしまえば、あとは自動で処理が進みます。
何より、生成AIのサポートを受けながら進められるので、プログラミング初心者でも安心です。
明日は「MCP設定で3時間ハマった私が伝えたい5つの解決策」についてお伝えします。
MCPで生成AIをサポーターからアシスタント・エージェントに進化させましょう!簡単そうで意外とMCP設定で引っかかって悩んでいる方、必見です!
🎁 読者特典
💝 いいね50を超えたら: 複数ファイル一括処理の完全コードを公開!
🎉 いいね100を超えたら: 応用例・活用アイデアの実装パターンを公開!
シェアの際は #YaroTech #VSCode #Excel自動化 #Python をつけていただけると嬉しいです。
💬 質問・リクエスト
「うちの会社の○○な作業も自動化できる?」
「このエラーが解決できない...」
コメント欄でお気軽にどうぞ!全て読んで、できる限りお答えします。
🔗 関連記事
📚 参考リソース
🏷️ タグ
#VSCode #Excel #Python #pandas #MCP #自動化 #VBA卒業 #効率化 #YaroTech #ClaudeDesktop #生成AI #プログラミング不要 #業務改善 #noteチャレンジ #ARM64 #SurfaceLaptop
いいなと思ったら応援しよう!
記事がお役に立てたなら嬉しいです!
いただいたチップは、新しいMCPツールの検証や、より深い実践実験の資金として大切に使わせていただきます。
あなたの応援が次の「AI活用の感動」を生み出す原動力になります✨
一緒に羽ばたき続けましょう!