リストを作るとは何か
Power Query(M言語)で「リストを作る」とは、複数の値をひとまとめにした“順番付きの箱”を作ることです。 Excelでいう「1列の縦並びデータ」に近いイメージで、数値・文字列・レコードなどを1本の線のように並べて持つことができます。
実務では、リストは次のような場面でよく使われます。
- 固定の値一覧(例:対象となる顧客コードのリスト)
- 連番や日付の一覧(例:1〜31の日付番号、特定期間の日付リスト)
- テーブルの1列を取り出したもの(例:売上テーブルの「顧客コード」列だけ)
- 集計や検索のための中間データ
ここでは、初心者向けに「リストの作り方・使い方」をステップバイステップで解説していきます。
M言語でのリストの基本構文
{ } で囲んでカンマ区切りにするとリストになる
最も基本的なリストの作り方は次のようになります。
let
Numbers = {1, 2, 3, 4, 5},
Texts = {"A", "B", "C"}
in
Numbers
Power Queryここでは、
Numbersは数値のリストTextsは文字列のリスト
になっています。
{} で囲んで、値をカンマで区切るとリストになる、というのが基本ルールです。
リストをステップバイステップで作る
ステップ1:まず「何を並べたいか」を決める
リストに入れるものは、次のようなものが多いです。
- 数値(例:1〜12の月番号)
- 文字列(例:顧客コードの一覧)
- 日付(例:特定期間の日付一覧)
- レコード(例:設定値の一覧)
例:月番号のリストを作る
let
Months = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
in
Months
Power Queryステップ2:連番リストは List.Numbers で作る
毎回 {1,2,3,...} と書くのは大変なので、 連番リストを作る専用関数 List.Numbers を使うことが多いです。
let
Start = 1,
Count = 12,
Step = 1,
Months = List.Numbers(Start, Count, Step)
in
Months
Power Queryここでは、
Start:開始値(1)Count:要素数(12個)Step:増分(1ずつ)
という指定で、{1,2,3,...,12} のリストを作っています。
日付番号や連番IDなど、「一定間隔で増えていく値」をリストにしたいときに非常に便利です。
ステップ3:テーブルの列からリストを作る
実務では、「テーブルの1列をリストとして扱いたい」という場面がよくあります。
let
SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
CustomerCodeList = SalesTable[顧客コード]
in
CustomerCodeList
Power Queryここでは、
SalesTable[顧客コード]で「顧客コード列だけ」を取り出し- それをリストとして
CustomerCodeListに入れています
このように、テーブルの列はそのままリストとして扱えるのが M言語の特徴です。
リストを使って何ができるか
リストから集計する
リストは、集計関数と組み合わせることで威力を発揮します。
let
SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
AmountList = SalesTable[金額],
TotalAmount = List.Sum(AmountList),
MaxAmount = List.Max(AmountList),
MinAmount = List.Min(AmountList)
in
[合計金額 = TotalAmount, 最大金額 = MaxAmount, 最小金額 = MinAmount]
Power Queryここでは、
AmountList:金額のリストList.Sum:合計List.Max:最大値List.Min:最小値
を計算しています。
テーブル全体ではなく「1列だけ」を対象にしたいとき、 リストにしてから集計するのが定番パターンです。
リストを検索や判定に使う
リストは「この値が一覧に含まれているか?」という判定にも使えます。
let
AllowedCustomerCodes = {"C001", "C002", "C003"},
SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
AddedAllowedFlag =
Table.AddColumn(
SalesTable,
"対象顧客",
each List.Contains(AllowedCustomerCodes, [顧客コード]),
type logical
)
in
AddedAllowedFlag
Power Queryここでは、
AllowedCustomerCodes:許可された顧客コードのリストList.Contains:リストに特定の値が含まれているかどうかを判定
という形で、「対象顧客かどうか」をフラグ化しています。
リストは「ホワイトリスト/ブラックリスト」のような判定に非常に向いている構造です。
リストを扱うときの重要な注意点
1. リストは「順番付き」である
リストは「順番を持つ」構造です。 インデックス(0から始まる番号)で要素を取り出すことができます。
let
Numbers = {10, 20, 30},
First = Numbers{0}, // 10
Second = Numbers{1}, // 20
Third = Numbers{2} // 30
in
[First = First, Second = Second, Third = Third]
Power Queryインデックスは 0から始まるので、 {0} が1番目、{1} が2番目、という点に注意が必要です。
2. インデックスが範囲外だとエラーになる
存在しないインデックスを指定するとエラーになります。
Numbers = {10, 20, 30},
Value = Numbers{3} // 要素は0〜2までなので、これはエラー
Power Queryそのため、インデックスを使うときは、
- リストの長さを確認する(
List.Count) - 必要なら条件分岐でガードする
といった工夫が重要です。
3. null を含むリストの扱いに注意する
リストの中に null が含まれていると、 集計や検索で意図しない結果になることがあります。
安全な書き方の一例は次の通りです。
let
AmountList = SalesTable[金額],
CleanAmountList = List.RemoveNulls(AmountList),
TotalAmount = List.Sum(CleanAmountList)
in
TotalAmount
Power QueryList.RemoveNulls で null を取り除いてから集計することで、 「欠損値のせいで集計結果が壊れる」ことを防げます。
4. セキュリティの観点からのリスト
リストは「許可された値の一覧」「対象ユーザーの一覧」など、 セキュリティに関わる情報を持つこともあります。
例:
AllowedRoles = {"Admin", "Manager"},
IsAllowedRole = List.Contains(AllowedRoles, [ロール])
Power Queryこのようなロジックを使う場合は、
- 誰が Power Query を編集できるか
- リストの内容を変更できる権限が適切か
を意識しておくことが重要です。
誤ってリストを変更すると、 本来許可されていないユーザーが操作できてしまうといったリスクにつながります。
実務で使える「リスト作成テンプレート」
テンプレ1:連番リスト(IDや日付番号)
let
StartId = 1,
Count = 100,
Step = 1,
IdList = List.Numbers(StartId, Count, Step)
in
IdList
Power Queryテンプレ2:テーブル列からリストを作って集計
let
SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
AmountList = SalesTable[金額],
CleanAmountList = List.RemoveNulls(AmountList),
TotalAmount = List.Sum(CleanAmountList),
MaxAmount = List.Max(CleanAmountList),
MinAmount = List.Min(CleanAmountList)
in
[合計金額 = TotalAmount, 最大金額 = MaxAmount, 最小金額 = MinAmount]
Power Queryテンプレ3:ホワイトリスト判定
let
AllowedCustomerCodes = {"C001", "C002", "C003"},
SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
AddedAllowedFlag =
Table.AddColumn(
SalesTable,
"対象顧客",
each List.Contains(AllowedCustomerCodes, [顧客コード]),
type logical
)
in
AddedAllowedFlag
Power Queryまとめ:リストを作ることは「値の集合に名前を付けること」
M言語でリストを作るというのは、 「複数の値をひとまとめにして、意味のある集合として扱うこと」です。
これによって、
- 連番や固定値一覧を簡潔に表現できる
- テーブルの列を柔軟に集計・検索できる
- ホワイトリスト/ブラックリスト判定が書きやすくなる
- セキュリティや業務ルールをコードとして明示できる
というメリットが得られます。
リストは、実務の Power Query で「見えないところを支える重要な部品」ですので、 ぜひ「{ } で作る」「List.Numbers や List.Contains を使いこなす」感覚を身につけていただきたいです。
