mcpField
X
xlsx

xlsx

github.com/jd-opensourceドキュメント31536 回インストール28 週間前に更新
リポジトリ

xlsx について

xlsx は、Excel ブックの作成、編集、分析を支援するスキルガイドです。pandas と openpyxl の手順、数式の再計算、エラー確認、財務モデルの規則を扱います。

主な機能

  1. 01ブックデータの読み取りと分析
  2. 02Excel ファイルの作成と編集
  3. 03数式による計算
  4. 04recalc.py による数式再計算
  5. 05数式エラーの確認
  6. 06財務モデル規則の適用

活用シーン

  1. 01pandas でブックデータを分析
  2. 02書式を保って Excel テンプレートを編集
  3. 03数式を使った財務モデルの作成
  4. 04納品前の数式確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jd-opensource/joysafeter --skill xlsx

インストール後、Claude Code で/xlsxを入力して読み込まれたか確認します。

同梱ファイルLICENSE.txtrecalc.py

詳細

出力に関する要件

すべての Excel ファイル

数式エラーゼロ
  • すべての Excel モデルは、数式エラー(#REF!、#DIV/0!、#VALUE!、#N/A、#NAME?)がゼロの状態で納品する必要があります。
既存のテンプレートを保持する(テンプレートを更新する場合)
  • ファイルを変更する際は、既存の書式、スタイル、規則を調査し、厳密に一致させてください。
  • すでに確立されたパターンがあるファイルに、標準化された書式を適用しないでください。
  • 既存のテンプレート規則は、常にこのガイドラインより優先されます。

財務モデル

色分けの基準

ユーザーまたは既存のテンプレートに別途指定がない場合に適用します。

業界標準の色分け規則
  • 青文字(RGB:0,0,255):ハードコードされた入力値、およびシナリオに応じてユーザーが変更する数値
  • 黒文字(RGB:0,0,0):すべての数式と計算
  • 緑文字(RGB:0,128,0):同じブック内の別のワークシートから取得したリンク
  • 赤文字(RGB:255,0,0):別のファイルへの外部リンク
  • 黄色の背景(RGB:255,255,0):注意が必要な重要な前提条件、または更新が必要なセル
数値書式の基準
必須の書式ルール
  • 年:テキスト文字列として書式設定します(例:「2024」。 「2,024」ではありません)。
  • 通貨:$#,##0 形式を使用します。ヘッダーには必ず単位を指定してください(「Revenue ($mm)」)。
  • ゼロ:パーセンテージを含むすべてのゼロが「-」になるよう、数値書式を使用します(例:"$#,##0;($#,##0);-")。
  • パーセンテージ:既定では 0.0% 形式(小数点以下 1 桁)にします。
  • 倍率:バリュエーション倍率(EV/EBITDA、P/E)は 0.0x 形式で書式設定します。
  • 負の数:マイナス記号を付けた -123 ではなく、括弧で囲んだ (123) にします。
数式の作成ルール
前提条件の配置
  • すべての前提条件(成長率、利益率、倍率など)は、個別の前提条件セルに配置してください。
  • 数式にはハードコードされた値ではなく、セル参照を使用してください。
  • 例:=B51.05 ではなく =B5(1+$B$6) を使用します。
数式エラーの防止
  • すべてのセル参照が正しいことを確認してください。
  • 範囲のオフバイワンエラーがないか確認してください。
  • すべての予測期間で数式に一貫性があることを確認してください。
  • エッジケース(ゼロ値、負の数)でテストしてください。
  • 意図しない循環参照がないことを確認してください。
ハードコード値のドキュメント要件
  • コメントまたはセル内に記載してください(表の末尾の場合)。形式:「Source: [System/Document], [Date], [Specific Reference], [URL if applicable]」
  • 例:
    • 「Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]」
    • 「Source: Company 10-Q, Q2 2025, Exhibit 99.1, [SEC EDGAR URL]」
    • 「Source: Bloomberg Terminal, 8/15/2025, AAPL US Equity」
    • 「Source: FactSet, 8/20/2025, Consensus Estimates Screen」

XLSX の作成、編集、分析

概要

ユーザーから .xlsx ファイルの内容の作成、編集、分析を依頼される場合があります。タスクに応じて、異なるツールやワークフローを利用できます。

重要な要件

数式の再計算には LibreOffice が必要です:recalc.py スクリプトを使用して数式の値を再計算するため、LibreOffice がインストールされているものとします。このスクリプトは初回実行時に LibreOffice を自動的に設定します。

データの読み取りと分析

pandas によるデータ分析

データ分析、可視化、基本操作には、強力なデータ操作機能を備えた pandas を使用してください。

import pandas as pd

# Read Excel
df = pd.read_excel('file.xlsx')  # Default: first sheet
all_sheets = pd.read_excel('file.xlsx', sheet_name=None)  # All sheets as dict

# Analyze
df.head()      # Preview data
df.info()      # Column info
df.describe()  # Statistics

# Write Excel
df.to_excel('output.xlsx', index=False)

Excel ファイルのワークフロー

重大:ハードコード値ではなく数式を使用する

Python で値を計算してハードコードするのではなく、必ず Excel の数式を使用してください。 これにより、スプレッドシートを動的に保ち、更新できるようになります。

❌ 誤り - 計算値をハードコードする
# Bad: Calculating in Python and hardcoding result
total = df['Sales'].sum()
sheet['B10'] = total  # Hardcodes 5000

# Bad: Computing growth rate in Python
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth  # Hardcodes 0.15

# Bad: Python calculation for average
avg = sum(values) / len(values)
sheet['D20'] = avg  # Hardcodes 42.5
✅ 正しい - Excel の数式を使用する
# Good: Let Excel calculate the sum
sheet['B10'] = '=SUM(B2:B9)'

# Good: Growth rate as Excel formula
sheet['C5'] = '=(C4-C2)/C2'

# Good: Average using Excel function
sheet['D20'] = '=AVERAGE(D2:D19)'

これは、合計、パーセンテージ、比率、差額など、すべての計算に適用されます。元データが変更されたときに、スプレッドシートを再計算できるようにしてください。

一般的なワークフロー

  1. ツールを選択する:データには pandas、数式や書式設定には openpyxl を使います
  2. 作成/読み込み:新しいブックを作成するか、既存のファイルを読み込みます
  3. 変更する:データ、数式、書式設定を追加・編集します
  4. 保存する:ファイルに書き込みます
  5. 数式を再計算する(数式を使用する場合は必須):recalc.py スクリプトを使います
    python recalc.py output.xlsx
    
  6. 確認してエラーを修正する:
    • スクリプトはエラーの詳細を含む JSON を返します
    • status が errors_found の場合は、error_summary で具体的なエラーの種類と場所を確認します
    • 特定されたエラーを修正し、もう一度再計算します
    • 修正が必要な一般的なエラー:
      • #REF!:セル参照が無効です
      • #DIV/0!:ゼロ除算です
      • #VALUE!:数式内のデータ型が正しくありません
      • #NAME?:数式名が認識されません
新しい Excel ファイルの作成
# Using openpyxl for formulas and formatting
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment

wb = Workbook()
sheet = wb.active

# Add data
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'
sheet.append(['Row', 'of', 'data'])

# Add formula
sheet['B2'] = '=SUM(A1:A10)'

# Formatting
sheet['A1'].font = Font(bold=True, color='FF0000')
sheet['A1'].fill = PatternFill('solid', start_color='FFFF00')
sheet['A1'].alignment = Alignment(horizontal='center')

# Column width
sheet.column_dimensions['A'].width = 20

wb.save('output.xlsx')
既存の Excel ファイルの編集
# Using openpyxl to preserve formulas and formatting
from openpyxl import load_workbook

# Load existing file
wb = load_workbook('existing.xlsx')
sheet = wb.active  # or wb['SheetName'] for specific sheet

# Working with multiple sheets
for sheet_name in wb.sheetnames:
    sheet = wb[sheet_name]
    print(f"Sheet: {sheet_name}")

# Modify cells
sheet['A1'] = 'New Value'
sheet.insert_rows(2)  # Insert row at position 2
sheet.delete_cols(3)  # Delete column 3

# Add new sheet
new_sheet = wb.create_sheet('NewSheet')
new_sheet['A1'] = 'Data'

wb.save('modified.xlsx')

数式の再計算

openpyxl で作成または変更した Excel ファイルには、数式は文字列として含まれていますが、計算済みの値は含まれていません。数式を再計算するには、付属の recalc.py スクリプトを使います。

python recalc.py <excel_file> [timeout_seconds]

例:

python recalc.py output.xlsx 30

このスクリプトは次の処理を行います。

  • 初回実行時に LibreOffice マクロを自動的にセットアップします
  • すべてのシートの数式を再計算します
  • Excel のエラー(#REF!、#DIV/0! など)についてすべてのセルをスキャンします
  • エラーの場所と件数を詳しく示す JSON を返します
  • Linux と macOS の両方で動作します

数式の検証チェックリスト

数式が正しく動作することを確認するための簡易チェックです。

必須の検証
  • 2~3 個の参照をテストする:モデル全体を作成する前に、正しい値を取得できることを確認します
  • 列の対応関係:Excel の列が一致していることを確認します(例:列 64 は BK ではなく BL です)
  • 行のオフセット:Excel の行番号は 1 から始まることを忘れないでください(DataFrame の行 5 = Excel の行 6)
よくある落とし穴
  • NaN の処理:pd.notna() で null 値を確認します
  • 右端の列:FY データは列 50 以降にあることがよくあります
  • 複数の一致:最初の一致だけでなく、すべての該当箇所を検索します
  • ゼロ除算:数式で / を使う前に分母を確認します(#DIV/0!)
  • 誤った参照:すべてのセル参照が意図したセルを指していることを確認します(#REF!)
  • シート間の参照:シートをリンクする際は、正しい形式(Sheet1!A1)を使います
数式のテスト戦略
  • 小規模から始める:数式を広く適用する前に、2~3 個のセルでテストします
  • 依存関係を確認する:数式で参照されるすべてのセルが存在することを確認します
  • 境界ケースをテストする:ゼロ、負の値、非常に大きな値を含めます
recalc.py の出力を読み取る

スクリプトはエラーの詳細を含む JSON を返します。

{
  "status": "success",           // or "errors_found"
  "total_errors": 0,              // Total error count
  "total_formulas": 42,           // Number of formulas in file
  "error_summary": {              // Only present if errors found
    "#REF!": {
      "count": 2,
      "locations": ["Sheet1!B5", "Sheet1!C10"]
    }
  }
}

ベストプラクティス

ライブラリの選択
  • pandas:データ分析、一括操作、単純なデータのエクスポートに最適です
  • openpyxl:複雑な書式設定、数式、Excel 固有の機能に最適です
openpyxl を使う
  • セルのインデックスは 1 から始まります(row=1、column=1 はセル A1 を指します)
  • 計算済みの値を読み取るには、data_only=True を使います:load_workbook('file.xlsx', data_only=True)
  • 警告:data_only=True で開いて保存すると、数式が値に置き換わり、完全に失われます
  • 大きなファイルの場合:読み込みには read_only=True、書き込みには write_only=True を使います
  • 数式は保持されますが評価されません。値を更新するには recalc.py を使います
pandas を使う
  • 型の推論に関する問題を避けるため、データ型を指定します:pd.read_excel('file.xlsx', dtype={'id': str})
  • 大きなファイルでは、特定の列を読み込みます:pd.read_excel('file.xlsx', usecols=['A', 'C', 'E'])
  • 日付を適切に処理します:pd.read_excel('file.xlsx', parse_dates=['date_column'])

コードスタイルのガイドライン

重要:Excel 操作の Python コードを生成する場合:

  • 不要なコメントを含めず、最小限で簡潔な Python コードを書きます
  • 冗長な変数名や重複した処理を避けます
  • 不要な print 文を避けます

Excel ファイル自体について:

  • 複雑な数式や重要な前提条件を含むセルにはコメントを追加します
  • ハードコードされた値のデータソースを記録します
  • 重要な計算やモデルのセクションには注記を含めます

コメント