はじめに
社内の申請書って、まだまだExcel形式で運用されていることが多いですよね。
たとえば、こんな出張申請書です。
- 申請者情報
- 出張内容
- 費用明細
- 承認欄
- 経理部の処理記録
こういったExcelフォームに対して、
「申請日を入れて」
「氏名を入れて」
「出張先を入れて」
「費用明細を埋めて」
「合計金額を計算して」
という作業を毎回手作業でやるのは、地味に面倒です。
そこで今回は、Claude Codeを使ってExcel申請書に自動で内容を記入する方法を紹介します。
やっていることはシンプルです。
- 元のExcelフォーマットを用意する
- Excelの構造をMarkdownに変換する
- Markdownに申請内容を記入する
- 記入済みMarkdownをもとにExcelへ書き戻す
AIに直接Excelを編集させるというより、
ExcelとAIの間にMarkdownを挟むのがポイントです。
完成イメージ
今回の流れでは、まず空のExcel申請書を用意します。
出張申請書_empty.xlsx
そのExcelから、以下のようなMarkdownテンプレートを作ります。
# 出張申請書
## 1. 申請者情報
| 項目 | 内容 | 項目 | 内容 |
|---|---|---|---|
| ★ 申請日 | | ★ 申請番号 | |
| ★ 所属部門 | | 課・チーム名 | |
| ★ 申請者氏名 | | ★ 社員番号 | |
| ★ メールアドレス | | 内線番号 | |
| 役職 | | ★ 上長氏名 | |
そして、このMarkdownに申請内容を記入します。
# 出張申請書
## 1. 申請者情報
| 項目 | 内容 | 項目 | 内容 |
|---|---|---|---|
| ★ 申請日 | 2026-06-23 | ★ 申請番号 | APP-2026-0456 |
| ★ 所属部門 | 営業部 | 課・チーム名 | 第一営業課 |
| ★ 申請者氏名 | 山田太郎 | ★ 社員番号 | E12345 |
| ★ メールアドレス | yamada.taro@company.co.jp | 内線番号 | 2345 |
| 役職 | 主任 | ★ 上長氏名 | 鈴木一郎 |
最後に、この記入済みMarkdownをもとに、元のExcelフォーマットへ値を書き戻します。
Excelのデザインや罫線、色、セル結合はそのまま残しつつ、入力欄だけを埋めるイメージです。
なぜMarkdownを挟むのか
Claude CodeなどのAIエージェントにExcelを直接編集させることもできます。
ただし、Excelは構造が見えにくいです。
たとえば、以下のような問題があります。
- セル結合がある
- 入力欄が空白セルになっている
- ラベルと入力欄の対応が見た目依存になっている
- 承認欄や処理記録など、申請者が書くべきでない欄がある
- 必須項目が背景色や記号で表現されている
一方で、Markdownにすると、AIにとってかなり扱いやすくなります。
| 項目 | 内容 |
|---|---|
| ★ 申請者氏名 | 山田太郎 |
| ★ 出張先 | 大阪府大阪市 |
| ★ 出張目的 | 新規顧客への提案商談および契約締結 |
このように、項目名と内容の対応がテキストとして明確になるため、AIが理解しやすくなります。
つまり、今回の方法は次のような考え方です。
Excelフォーム
↓
Markdownテンプレート
↓
記入済みMarkdown
↓
記入済みExcel
全体の流れ
今回の作業は、ざっくり以下の4ステップです。
Step 1. 元のExcelフォーマットを準備する
Step 2. Excelの構造をMarkdownテンプレートにする
Step 3. Markdownに申請内容を記入する
Step 4. Markdownの内容をExcelに書き戻す
Step 1. 元のExcelフォーマットを準備する
まず、空のExcel申請書を用意します。
例として、以下のようなファイルを用意します。
出張申請書_empty.xlsx
このExcelには、すでに以下のようなデザインが入っているものとします。
- タイトル
- セクション見出し
- 罫線
- 背景色
- セル結合
- 入力欄
- フッター
- 承認欄
ここでは、Excelの見た目は完成済みという前提です。
AIにゼロからExcel帳票を作らせるのではなく、
すでにあるExcelフォーマットに対して、入力値だけを入れるのが目的です。
Step 2. Excelの構造をMarkdownにする
次に、Claude Codeに元のExcelファイルを参照してもらい、申請書の内容をMarkdown形式のファイルとして書き出してもらいます。
実際にやっていることはかなりシンプルです。
Claude Codeに対して、以下のように依頼します。
元のExcelファイル `出張申請書_empty.xlsx` を参照して、
申請書の構造をMarkdown形式のファイルに書き出してください。
条件:
- Excelのセクション構造をMarkdownの見出しにしてください
- 入力項目はMarkdownテーブルで表現してください
- 必須項目の★は残してください
- 入力欄は空欄のままにしてください
- 承認欄や経理部の処理記録も、フォームの構造としては残してください
- 申請者が記入しない欄は空欄のままにしてください
すると、Claude CodeがExcelの内容を確認し、次のようなMarkdownテンプレートを作成してくれます。
# 出張申請書
※ 必須項目(黄色背景)は必ずご記入ください。出張前に所属部門長の承認を受けてください。
## 1. 申請者情報
| 項目 | 内容 | 項目 | 内容 |
|---|---|---|---|
| ★ 申請日 | | ★ 申請番号 | |
| ★ 所属部門 | | 課・チーム名 | |
| ★ 申請者氏名 | | ★ 社員番号 | |
| ★ メールアドレス | | 内線番号 | |
| 役職 | | ★ 上長氏名 | |
## 2. 出張内容
| 項目 | 内容 |
|---|---|
| ★ 出張先(都市・国) | |
| 訪問先企業・部署 | |
| ★ 出張目的 | |
ここでは、自分でExcelのセル座標を細かく調べたり、Pythonスクリプトを先に書いたりしているわけではありません。
まずは、Claude Codeに
このExcelをMarkdownにして
と依頼して、Excelフォームの構造をテキスト化してもらうだけです。
ポイントは、Excelの見た目をそのまま再現しようとしすぎないことです。
Markdownでは、AIが理解しやすいように、
- セクション
- 項目名
- 入力値
- 必須項目
- 表形式の項目
が分かることを優先します。
Step 3. Markdownに申請内容を記入する
次に、Markdownテンプレートに申請内容を記入します。
たとえば、以下のような申請内容があるとします。
申請日: 2026-06-23
申請番号: APP-2026-0456
所属部門: 営業部
課・チーム名: 第一営業課
申請者氏名: 山田太郎
社員番号: E12345
メールアドレス: yamada.taro@company.co.jp
出張先: 大阪府大阪市
出張目的: 新規顧客への提案商談および契約締結
出張期間: 2026-07-07 〜 2026-07-08
移動手段: 新幹線
これをMarkdownに反映します。
# 出張申請書
※ 必須項目(黄色背景)は必ずご記入ください。出張前に所属部門長の承認を受けてください。
## 1. 申請者情報
| 項目 | 内容 | 項目 | 内容 |
|---|---|---|---|
| ★ 申請日 | 2026-06-23 | ★ 申請番号 | APP-2026-0456 |
| ★ 所属部門 | 営業部 | 課・チーム名 | 第一営業課 |
| ★ 申請者氏名 | 山田太郎 | ★ 社員番号 | E12345 |
| ★ メールアドレス | yamada.taro@company.co.jp | 内線番号 | 2345 |
| 役職 | 主任 | ★ 上長氏名 | 鈴木一郎 |
## 2. 出張内容
| 項目 | 内容 |
|---|---|
| ★ 出張先(都市・国) | 大阪府大阪市 |
| 訪問先企業・部署 | 株式会社サンプル商事 営業部 |
| ★ 出張目的 | 新規顧客への提案商談および契約締結 |
| ★ 出張期間(開始日) | 2026-07-07 |
| ★ 出張期間(終了日) | 2026-07-08 |
| ★ 移動手段 | 新幹線 |
| 同行者 | 佐藤花子 |
| ★ 出張詳細・備考 | 7/7 13:00に先方オフィスにて打合せ予定。1泊し、翌日午前に帰社。 |
## 3. 費用明細(見積)
| No. | 費目 | 内容 | 金額(円) | 備考 |
|---:|---|---|---:|---|
| 1 | 交通費 | 新幹線往復(東京-大阪) | 28000 | |
| 2 | 宿泊費 | ホテル1泊 | 12000 | |
| 3 | 出張手当 | 日当2日分 | 6000 | |
| 4 | | | | |
| 5 | | | | |
| 合計 | | | 46000 | |
この時点では、まだExcelには書き込んでいません。
まずはMarkdown上で、
- 内容に間違いがないか
- 必須項目が埋まっているか
- 金額の合計が合っているか
- 申請者が記入すべきでない欄を埋めていないか
を確認できます。
Step 4. Markdownの内容をExcelに書き戻す
最後に、記入済みMarkdownの内容をExcelへ反映します。
ClaudeCodeで、ファイルを指定して
この内容をを記載して
と指示するだけです。
これで、Excelの見た目を維持したまま、入力欄だけを埋めたファイルを作成できます。
Claude Codeに依頼するプロンプト例
実際には、Claude Codeに以下のように依頼しました。
このExcel申請書を読み取って、記入用のMarkdownテンプレートを作成してください。
条件:
- Excelのセクション構造をMarkdownの見出しにしてください
- 入力欄はMarkdownテーブルで表現してください
- 必須項目は★を残してください
- 空欄は空欄のままにしてください
- 承認欄や経理部の処理記録は、申請者が記入しない欄として空欄のままにしてください
最後に、記入済みMarkdownをExcelに反映します。
この記入済みMarkdownの内容を、元のExcelフォーマットに書き戻してください。
条件:
- Excelのデザイン、罫線、色、セル結合は変更しないでください
- 入力値だけを設定してください
- マージセルの場合は左上セルに値を入れてください
- 承認欄と経理部の処理記録は空欄のままにしてください
- 別ファイルとして保存してください
Skill化する
毎回同じ手順をClaude Codeに説明するのは面倒です。
そこで、今回の作業をSkillとして定義しました。
以下はSkillファイルの例です。
---
name: excel-form-to-markdown
description: Excel形式の申請書・フォーム(.xlsx)をMarkdownに書き出し、記入内容を反映してExcelに書き戻す。「このExcelをmarkdownにして」「申請内容を記載して」「xlsxに反映して」のような依頼で使う。
---
# Excelフォーム ⇄ Markdown 変換スキル
社内申請書などのExcelフォーム(.xlsx)を対象に、以下の3ステップを行うスキルです。
1. Excelの構造をMarkdownのテンプレートとして書き出す
2. テンプレートに実際の申請内容を記入したMarkdownを作成する
3. 記入済みMarkdownの内容を元のExcelファイルの該当セルに書き戻す
## 手順
### Step 1. Excelの内容を読み取り、構造を把握する
`openpyxl` で対象の `.xlsx` を読み込み、値が入っている全セルを座標付きで列挙する。
```bash
python3 -c "
import openpyxl
wb = openpyxl.load_workbook('対象ファイル.xlsx', data_only=True)
for ws in wb.worksheets:
print('=== SHEET:', ws.title, ws.dimensions, '===')
for row in ws.iter_rows():
for cell in row:
if cell.value is not None:
print(cell.coordinate, repr(cell.value))
"
```
この出力から、見出し(■で始まる文字列)・必須ラベル(★始まり)・入力欄(マージセルや空セル)のレイアウトを把握する。
### Step 2. テンプレートMarkdownを作成する
Step 1で把握した構造をもとに、セクション見出し(`##`)・表(`| 項目 | 内容 |`)・リストでフォームを再現したMarkdownファイルを作成する。入力欄は空欄のままにする。
### Step 3. 記入済みMarkdownを作成する
ユーザーから実際の記入内容を受け取り、Step 2のテンプレートをコピーして、各項目を埋めた別ファイルとして保存する。
### Step 4. 記入済みMarkdownをExcelに書き戻す
記入済みMarkdownの値と、Excelの実際のセル座標を対応付け、`openpyxl`でセルに値を設定して保存する。
## 注意点
- Excelのレイアウトは対象ファイルごとに異なるため、都度構造を確認する
- 必須項目は記入漏れがないか確認する
- 申請者が記入すべきでない欄は空欄のままにする
- マージセルには左上セルだけに値を設定する
Skill化しておくと、次回からは次のような依頼だけで済みます。
このExcel申請書をMarkdown化してください
この申請内容でMarkdownを記入してください
記入済みMarkdownをもとにExcelへ反映してください
つまり、毎回細かい手順を説明しなくても、
ExcelフォームをMarkdown化して、記入して、Excelに戻すという一連の作業を再利用できます。
この方法の良いところ
この方法の良いところは、AIに任せる範囲を明確にできることです。
AIにいきなりExcelを全部編集させるのではなく、まずMarkdownにします。
そのため、人間も途中で内容を確認できます。
Excel
↓
Markdownテンプレート ← 人間が確認しやすい
↓
記入済みMarkdown ← 人間が修正しやすい
↓
Excel
特に良い点は以下です。
- Excelのデザインを壊しにくい
- 入力内容をレビューしやすい
- Gitで差分管理しやすい
- AIにとって構造が理解しやすい
- 申請内容だけを再利用しやすい
- フォームごとにSkill化できる
Markdownはテキストなので、Gitで管理すると差分も見やすいです。
たとえば、以下のように変更内容が分かりやすくなります。
- | ★ 出張先(都市・国) | 大阪府大阪市 |
+ | ★ 出張先(都市・国) | 愛知県名古屋市 |
Excelを直接比較するよりも、かなりレビューしやすいです。
注意点
便利な方法ですが、注意点もあります。
1. 元のExcelファイルは必ずコピーして使う
AIやスクリプトでExcelを編集する場合、元ファイルを直接上書きするのは危険です。
必ず以下のように、出力ファイルを分けるのがおすすめです。
出張申請書_empty.xlsx
出張申請書_記入済み.xlsx
2. セル結合に注意する
Excelにセル結合がある場合、値を書き込めるのは基本的に結合範囲の左上セルです。
たとえば、C6:E6が結合されている場合は、C6に値を入れます。
ws["C6"] = "2026-06-23"
結合セルの途中に値を入れようとすると、エラーになったり、期待通りに反映されなかったりします。
3. 申請者が書くべきでない欄は埋めない
申請書には、申請者が記入しない欄があります。
たとえば、
- 承認欄
- 経理部の処理記録
- 受付番号
- 処理完了日
- 管理部門の備考
などです。
AIに依頼するときは、これらの欄を勝手に埋めないように明示した方がよいです。
承認欄と経理部の処理記録は空欄のままにしてください。
4. 個人情報・機密情報の扱いに注意する
申請書には、氏名、メールアドレス、社員番号、出張先、取引先名などが含まれることがあります。
業務で使う場合は、社内ルールに従ってください。
特に、外部AIサービスに入力してよい情報かどうかは確認が必要です。
サンプル記事や検証では、架空のデータを使うのがおすすめです。
まとめ
今回は、Claude Codeを使ってExcel申請書を自動で記入する方法を紹介しました。
ポイントは、Excelを直接AIに編集させるのではなく、
Excel → Markdown → Excelという流れにすることです。
1. 元のExcelフォーマットを準備する
2. Excelの構造をMarkdownテンプレートにする
3. Markdownに申請内容を記入する
4. 記入済みMarkdownをExcelに書き戻す
この方法にすると、
- AIが内容を理解しやすい
- 人間がレビューしやすい
- Excelのデザインを壊しにくい
- Skill化して再利用しやすい
というメリットがあります。
申請書、見積書、稟議書、報告書など、
Excelで運用されている社内フォームにはかなり応用できそうです。
AIに全部任せるというより、
AIが扱いやすい中間形式を作って、確実にExcelへ戻す。
この考え方が、業務でAIを使うときにはかなり重要だと思います。