xlsx について
xlsxは、AIエージェントによるExcelブックの作成、編集、分析を支援するスキルです。数式での計算、既存テンプレートの維持、数式エラーの確認を重視します。
主な機能
- 01Excelブックの作成と編集
- 02pandasによる表データ分析
- 03計算値への数式の使用
- 04既存テンプレートの書式維持
- 05数式の再計算とエラー確認
活用シーン
- 01独立した前提条件を参照する財務モデルの作成
- 02既存の書式を保ったブックの更新
- 03複数のExcelシートにまたがるデータ分析
- 04ブック内の数式エラーの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ iofficeai/ aionui --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): 注意が必要な主要な前提条件、または更新が必要なセル
数値書式の標準
必須の書式ルール
- 年: テキスト文字列として書式設定します(例: "2,024" ではなく "2024")
- 通貨: $#,##0 形式を使用し、見出しには必ず単位を明記します(「収益($mm)」など)
- ゼロ: 数値書式を使用して、パーセンテージを含むすべてのゼロを "-" で表示します(例: "$#,##0;($#,##0);-")
- パーセンテージ: 既定では 0.0% 形式(小数点以下 1 桁)とします
- 倍率: バリュエーション倍率(EV/EBITDA、P/E)は 0.0x 形式で書式設定します
- 負の数: マイナス記号 -123 ではなく、括弧 (123) を使用します
数式の構築ルール
前提条件の配置
- すべての前提条件(成長率、利益率、倍率など)は、別個の前提条件セルに配置します
- 数式内で値を直接記述せず、セル参照を使用します
- 例: =B51.05 ではなく、=B5(1+$B$6) を使用します
数式エラーの防止
- すべてのセル参照が正しいことを確認します
- 範囲の境界での 1 つずれ(オフバイワン)エラーがないか確認します
- すべての予測期間で数式が一貫していることを確認します
- エッジケース(ゼロ値、負の数)でテストします
- 意図しない循環参照がないことを確認します
ハードコードの文書化要件
- コメントとして記載するか、表の末尾の場合は隣接するセルに記載します。形式: 「Source: [システム/文書], [日付], [具体的な参照先], [該当する場合は URL]」
- 例:
- 「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)'
これは、合計、割合、比率、差異など、すべての計算に適用されます。元のデータが変更されたときに、スプレッドシートが再計算されるようにしてください。
一般的なワークフロー
- ツールの選択: データ処理には pandas、数式や書式設定には openpyxl を使用します
- 作成・読み込み: 新しいワークブックを作成するか、既存のファイルを読み込みます
- 変更: データ、数式、書式を追加・編集します
- 保存: ファイルに書き込みます
- 数式の再計算(数式を使用する場合は必須): recalc.py スクリプトを使用します
python recalc.py output.xlsx - エラーの確認と修正:
- スクリプトはエラーの詳細を含む 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 値を確認します - 右端の列: 会計年度データは列 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 ファイル自体について:
- 複雑な数式や重要な前提条件があるセルにはコメントを追加します
- 直接入力された値のデータソースを記録します
- 主要な計算やモデルのセクションには注記を追加します