Power Queryの繰り返し処理、諦めてませんか?
Power Queryでデータ加工をしていると、こんな場面に出会いませんか?
「このリストにある値の数だけ、列を追加したいんだけど…手動でやるの?😭」
私、最初にこの課題にぶつかったとき、手動で列を追加してました。リストに5個しか値がないならまだしも、10個、20個あったら…想像したくないですよね。
でも大丈夫!List.Accumulateという強力な関数があるんです。
最初の反応:「なにこれ、難しそう…」
正直に言います。私も最初にList.Accumulateを見たとき、「無理!」って思いました。
公式ドキュメント見ても、accumulatorとかseedとか、なんだか呪文みたいで…避けて通ろうかと思ったくらいです😅
でも実際に使ってみたら、「あっ、こういうことか!」って。今では「最初から知ってればよかった…」って思う関数の一つです。
List.Accumulateって何?
一言で言うと:
「リストの各値を使って、何かを繰り返し処理する関数」です。
料理で例えると:
– リスト = 使う材料のリスト(人参、玉ねぎ、じゃがいも)
– 処理 = それぞれの材料を切って鍋に入れる
– 結果 = 全部の材料が入ったカレー鍋✨
一つずつ材料を処理して、最終的に一つの結果を作る。それがList.Accumulateです!

基本の書き方を理解しよう
List.Accumulateは3つの材料が必要です:
List.Accumulate(list, seed, accumulator)
1. list (リスト)
繰り返し処理の対象
「何に対して処理を繰り返すか」を指定します。
{"A", "B", "C"} // これらに対して処理を繰り返す
2. seed (シード/初期値)
処理の出発点
「どこから始めるか」を指定します。
テーブルを作るなら、最初のテーブルの形がこれ。
#table({"基本列"}, {{1}, {2}}) // 「基本列」という列を持つテーブルからスタート
3. accumulator (アキュムレーター/処理内容)
各値をどう処理するか
「リストの各値を使って何をするか」を指定します。
(現在の状態, リストの値) => どう変化させるか
実際のコード例で理解しよう!
例:リストの値を使って列を自動追加
やりたいこと:
{"A", "B"}というリストがあって、その値の数だけ列を増やしたい。
コード:
let
list = {"A","B"}, // ①処理対象のリスト
seed = #table({"テーブル"},{{1},{2}}), // ②初期テーブル
accumulator = (s,c) => Table.AddColumn(s, c, each c), // ③各値で列追加
result = List.Accumulate(list, seed, accumulator) // 実行!
in
result
コードの読み解き方 🔍
①list =
「A」と「B」という2つの値に対して処理を繰り返します。
②seed = #table({“テーブル”},{{1},{2}})
最初の状態として、「テーブル」という列に1と2が入ったテーブルを用意。
| テーブル |
|---|
| 1 |
| 2 |
③accumulator = (s,c) => Table.AddColumn(s, c, each c)
ここが肝心!
s= 現在のテーブル(state)c= リストから取ってきた値(current value)Table.AddColumn(s, c, each c)= テーブルsに、列名cで、値もcの列を追加
具体的な動き:
1回目: リストから”A”を取得
– 現在のテーブルに「A」という列を追加
– 各行の値は”A”
| テーブル | A |
|---|---|
| 1 | A |
| 2 | A |
2回目: リストから”B”を取得
– さらに「B」という列を追加
– 各行の値は”B”
| テーブル | A | B |
|---|---|---|
| 1 | A | B |
| 2 | A | B |
完成! ✨
実際にやってみよう!
ステップ1: Power Queryエディターを開く
- Excelで「データ」タブ → 「データの取得」
- 「その他のソースから」→「空のクエリ」を選択
ステップ2: コードをペースト
詳細エディターに上記のコードを貼り付けます。
ステップ3: 実行して確認!
「完了」をクリックすると…

テーブルに2つの列(AとB)が自動で追加されました!🎉
実際の使い道は?
使用例1:月ごとの列を自動生成
// 1月〜12月の列を自動で作る
let
months = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"},
baseTable = #table({"商品"}, {{"商品A"}, {"商品B"}}),
addMonthColumns = (tbl, month) => Table.AddColumn(tbl, month, each 0),
result = List.Accumulate(months, baseTable, addMonthColumns)
in
result
結果:商品ごとに1月〜12月の列が自動生成!
使用例2:カテゴリごとの集計列を追加
リストで定義されたカテゴリの数だけ、集計列を自動で追加できます。
よくある疑問 Q&A
Q1: seedって何を設定すればいい?
A: 「処理を始める前の初期状態」です。
- テーブルに列を追加するなら → 最初のテーブル
- 数値を合計するなら → 0
- リストに追加するなら → 空のリスト
{}
Q2: accumulatorの書き方がわからない
A: (現在, 次の値) => 変化後の形で書きます。
パターン例:
// テーブルに列追加
(tbl, colName) => Table.AddColumn(tbl, colName, ...)
// 数値を足していく
(sum, num) => sum + num
// リストに追加
(list, item) => list & {item}
Q3: エラーが出る…
A: よくあるエラー:
「Expression.Error」
→ accumulatorの関数が間違ってます。(s, c) =>の形になってるか確認!
「型が合わない」エラー
→ seedの型とaccumulatorの戻り値の型が合ってるか確認しましょう。
まとめ:List.Accumulateを使うと…
✅ 繰り返し作業が自動化できる
リストの値の数だけ、自動で処理が走る!
✅ コードが短く、メンテが楽
手動で10列追加するコードより、List.Accumulateで自動化する方がスッキリ。
✅ 柔軟性が高い
リストの中身を変えるだけで、処理内容が自動で変わる。
最後に
List.Accumulate、最初は難しそうに見えますよね。私もそうでした😊
でも一度使ってみると、「あ、こういうことか!」って腑に落ちる瞬間が来ます。
ポイントは:
1. list – 何に対して繰り返すか
2. seed – どこから始めるか
3. accumulator – 各値で何をするか
この3つを押さえれば大丈夫!
まずは今日の例をそのまま試してみてください。
動いたら、リストの値を変えたり、処理内容を変えたりして遊んでみましょう。
「こういう使い方できないかな?」って疑問があったら、コメントで教えてくださいね!
一緒に考えましょう✨
参考リンク:
– M言語公式ドキュメント – List.Accumulate
関連記事:
– Power Queryの基本 (coming soon!)
– M言語の関数一覧 (coming soon!)
次のステップ:
List.Accumulateが使えるようになったら、List.Generate にも挑戦してみましょう!もっと複雑な繰り返し処理ができるようになりますよ🎯

コメント