実務で使えるPower Query小技・テクニック | リストを作る

Excel VBA Power Query M Formula Language
スポンサーリンク
スポンサーリンク

リストを作るとは何か

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 Query

List.RemoveNullsnull を取り除いてから集計することで、 「欠損値のせいで集計結果が壊れる」ことを防げます。

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 を使いこなす」感覚を身につけていただきたいです。

タイトルとURLをコピーしました