エクセル 自動化 例9選、n8nでコードなしに変換
エクセル 自動化 例を探しているなら、表を別のシステムに移したり形式を合わせたりする作業を手作業で繰り返すのに疲れたからでしょう。n8nはアプリやAPIをコードなしでつなぎ、自動で動くワークフローを作れるノーコードツールです。
自動再生 · タイルを押すとその項目へ · すべて1つのzip
- 01 JSON行をCSVファイルに
- 02 CSVファイルをJSON行に
- 03 入れ子のJSONを平坦化
- 04 配列フィールドを行に分割
- 05 複数アイテムを1つの配列に
- 06 フィールド名を一括で変更
- 07 文字列・日付の整形
- 08 タイムスタンプだけ除いて重複削除
- 09 カテゴリ別にグループ化して合計
9つはデータが実際につまずく順番に並べました。まずファイル自体を変える2つ(01 JSONをCSVに・02 CSVをJSONに)、次に構造を組み直す3つ(03 平坦化・04 分割・05 統合)、続いて名前と値を整える2つ(06 フィールド名・07 文字列と日付)、最後に絞り込んでまとめる2つ(08 重複削除・09 グループ集計)です。実際の事務作業もたいていこの順でこじれます — 形が合わず、構造が合わず、値が汚れていて、最後に数字を1つ出したくなります。
01JSON行をCSVファイルに
Code ノードが商品6行を作り、Convert to File がそれを実際の CSV バイナリファイルにまとめます。このノードは結果を json ではなく binary にしか入れないので、続く Code ノードでファイル名とサイズを読み取り直し、変換できたか確かめます。ダウンロード用レポートを作ったり、メール添付ファイルとして送ったりするときに使います。
{
"name": "Build CSV File",
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"parameters": {
"operation": "csv",
"binaryPropertyName": "data",
"options": {
"fileName": "products.csv",
"headerRow": true
}
}
}
02CSVファイルをJSON行に
HTTP Request が公開 CSV ファイルをバイナリで取得し、Extract from File が各行を JSON アイテム1つずつに展開します。Limit が先頭5件だけ残して結果を絞ります。外部から受け取ったCSVをワークフローのデータにしたり、スプレッドシートの取り込みに使ったりします。
{
"name": "Parse CSV Rows",
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1.1,
"parameters": {
"operation": "csv",
"binaryPropertyName": "data",
"options": {
"headerRow": true
}
}
}
03入れ子のJSONを平坦化
Code ノードが住所と座標まで2段階に入れ子になった顧客データを1件作り、2つ目の Code が再帰関数で address.city のようなドット表記キー1本の平坦なオブジェクトに展開します。入れ子のAPIレスポンスをスプレッドシートに入れる前の整理や、フォームデータの平坦化に使います。
{
"name": "Flatten Record",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"parameters": {
"jsCode": "function flatten(obj, prefix, out) {\n prefix = prefix || '';\n out = out || {};\n for (const [k, v] of Object.entries(obj)) {\n const key = prefix ? prefix + '.' + k : k;\n if (v && typeof v === 'object' && !Array.isArray(v)) {\n flatten(v, key, out);\n } else {\n out[key] = v;\n }\n }\n return out;\n}\nconst record = $input.first().json;\nreturn [{ json: flatten(record) }];"
}
}
04配列フィールドを行に分割
Code ノードが品目の配列を持つ注文を1件作り、Split Out がその配列を展開して品目ごとに独立したアイテムに分けます。注文1件の品目をそれぞれ処理したいときや、請求書の行分割に使います。
{
"name": "Split Line Items",
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"parameters": {
"fieldToSplitOut": "lineItems",
"include": "noOtherFields",
"options": {}
}
}
05複数アイテムを1つの配列に
Code ノードがログ8行を8個のアイテムとして作り、Aggregate の Aggregate All Item Data がそれ全部を logs という1つのフィールドの配列にまとめてアイテム1個にします。ログを1つのファイルにまとめて送るときや、要約レポートの元配列を作るときに使います。
{
"name": "Combine Into List",
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"parameters": {
"aggregate": "aggregateAllItemData",
"destinationFieldName": "logs",
"options": {}
}
}
06フィールド名を一括で変更
Code ノードが usr_nm・usr_em・ord_amt のようなレガシー名を持つ行を1件作り、Rename Keys がその3つを name・email・amount に一括で変更します。レガシーAPIのフィールド名を自分たちの名前にしたいときや、スプレッドシートの列名統一に使います。
{
"name": "Rename To Our Schema",
"type": "n8n-nodes-base.renameKeys",
"typeVersion": 1,
"parameters": {
"keys": {
"key": [
{ "currentKey": "usr_nm", "newKey": "name" },
{ "currentKey": "usr_em", "newKey": "email" },
{ "currentKey": "ord_amt", "newKey": "amount" }
]
}
}
}
07文字列・日付の整形
Code ノードが余分な空白や大文字小文字の混在、3種類のバラバラな日付形式を持つデータを作り、2つ目の Code が名前を整えつつ、日付を YYYY-MM-DD 1本に揃えます。フォーム入力の整理や、バラバラな日付フォーマットの統一に使います。
{
"name": "Clean Records",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"parameters": {
"jsCode": "function toTitleCase(s) {\n return s.trim().replace(/\\s+/g, ' ').toLowerCase().replace(/\\b\\w/g, c => c.toUpperCase());\n}\nfunction toDateOnly(raw) {\n const d = new Date(raw);\n return d.toISOString().slice(0, 10);\n}\nreturn $input.all().map(item => ({\n json: {\n name: toTitleCase(item.json.name),\n email: item.json.email.trim().toLowerCase(),\n date: toDateOnly(item.json.raw_date)\n }\n}));"
}
}
08タイムスタンプだけ除いて重複削除
Code ノードが同じ顧客・商品でも閲覧時刻 seenAt だけ違う行を混ぜて作り、Remove Duplicates が seenAt だけを比較から除いて、残りのフィールドを基準に重複を消します。同じイベントが時刻だけ違って何度も届くときや、ログの重複整理に使います。
{
"name": "Dedupe Ignoring seenAt",
"type": "n8n-nodes-base.removeDuplicates",
"typeVersion": 2,
"parameters": {
"compare": "allFieldsExcept",
"fieldsToExclude": "seenAt"
}
}
09カテゴリー別にグループ化して合計
Code ノードが注文12件を作り、Summarize が category でグループ化して amount の合計と件数を出し、カテゴリごとにアイテム1個ずつ返します。売上のカテゴリ別集計や、ダッシュボード用のグループ合計を作るときに使います。
{
"name": "Group By Category",
"type": "n8n-nodes-base.summarize",
"typeVersion": 1.1,
"parameters": {
"fieldsToSplitBy": "category",
"fieldsToSummarize": {
"values": [
{ "aggregation": "sum", "field": "amount" },
{ "aggregation": "count", "field": "category" }
]
}
}
}
準備するもの — アカウント・権限・バージョン
準備するものの欄は9つとも「なし」ですが、それでも表を置くのは等級と検証時の n8n バージョンを項目ごとに示すためです。この記事は9つ全部が V2(実行まで確認済み)です — 生きた Webhook URL が要る項目がないので、アカウントなしのまま全項目を実行まで確認できました。
| 項目 | 等級 | 準備するもの | n8n バージョン |
|---|---|---|---|
| 01 JSON行をCSVファイルに | V2 | なし | 2.38.5 |
| 02 CSVファイルをJSON行に | V2 | なし | 2.38.5 |
| 03 入れ子のJSONを平坦化 | V2 | なし | 2.38.5 |
| 04 配列フィールドを行に分割 | V2 | なし | 2.38.5 |
| 05 複数アイテムを1つの配列に | V2 | なし | 2.38.5 |
| 06 フィールド名を一括で変更 | V2 | なし | 2.38.5 |
| 07 文字列・日付の整形 | V2 | なし | 2.38.5 |
| 08 タイムスタンプだけ除いて重複削除 | V2 | なし | 2.38.5 |
| 09 カテゴリー別にグループ化して合計 | V2 | なし | 2.38.5 |
n8n への取り込み方はいくつかあります。キャンバスに Ctrl/Cmd+V で JSON をそのまま貼り付けるか、メニューの Import from File で zip 内のファイルを選ぶか、CLI 環境なら n8n import:workflow --input=ファイル.json の1行で済みます。取り込んだ後は、左上の Test workflow ボタン(または Manual Trigger ノードの再生アイコン)を押せばその場で動きます。
どこで壊れるか
一番つまずきやすいのは Convert to File ノードが結果をどこに入れるかです — 01のようにCSVに変換するノードは結果を binary にしか 入れず json を空にするので、このノードをワークフローの一番最後に置くと、次のステップが読み取れるデータが何もないように見えます。zip のパスワードは 497s6r8z で、解凍すると workflows/ フォルダに9個のファイルがそのまま入っています。Summarize ノードにも似た落とし穴があって、amount を合計した結果は amount ではなく sum_amount という名前で返ってくるので、そこを確かめないと次のノードがそのフィールドを見つけられずまた壊れます。
FAQ
n8nとは何ですか? エクセルのマクロと何が違いますか?
n8nはアプリやAPIをコードなしでつなぎ、自動で動くワークフローを作れるノーコードツールです。マクロは1つのエクセルファイルの中だけで動きますが、n8nはスプレッドシートとメール、別システムのAPIまで1つの流れにつなげられます。
この例もアカウントが必要ですか?
いいえ。9つ全部がログインもAPIキーもなしで、Manual Trigger を押すだけでその場で動きます。公開ファイルを取得する02も実際に200が返ることまで確認しています。
手元のデータの形が例と違う場合はどうすればいいですか?
たいていはフィールド名を変えるだけで済みます。06の Rename Keys ノードなら、currentKey・newKey のペアを差し替えるだけで、どんなフィールド名の組み合わせにもそのまま使えます。
n8nが初めての方は、自動化カテゴリーやn8n ワークフロー サンプル9選で同じ系統の例が見られますし、このサイトがどんな基準で検証しているかは概要ページに書いています。