実務で使えるPower Query小技・テクニック | 変数を定義する

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

変数を定義するとは何か

Power Query(M言語)で「変数を定義する」というと、急に難しく聞こえるかもしれませんが、実務で使う範囲ならイメージはとてもシンプルです。 M言語における「変数」とは、途中の計算結果やテーブルを“名前を付けて保存しておく箱”だと思ってください。

この「箱」に名前を付けておくことで、 後続の処理から何度でも参照できるようになり、 クエリが読みやすく・安全で・再利用しやすくなります。

M言語での変数定義の基本構文

let … in の中で「名前 = 値」を書く

M言語では、変数は let … in の中で 名前 = 値 と書くことで定義します。

最小の例は次のようになります。

let
    x = 10,
    y = x * 2
in
    y
Power Query

ここでのポイントは次の通りです。

  • x という変数に 10 を入れている
  • y という変数に x * 2(つまり 20)を入れている
  • in y なので、最終的な結果は 20

この「名前 = 値」が、M言語における変数定義の基本形です。

実務でよく使う「テーブル変数」の定義

例:売上テーブルを変数として定義する

実務では、数値よりも「テーブル」を変数として扱うことが圧倒的に多いです。

let
    SalesTable =
        Excel.CurrentWorkbook(){[Name="売上"]}[Content]
in
    SalesTable
Power Query

ここでは、

  • SalesTable という変数に「Excelの売上テーブル」を入れている
  • in SalesTable なので、そのテーブルをそのまま返している

という構造になっています。

この SalesTable を後続のステップで何度でも参照できるようにしておくことが、 「変数を定義する」ことの実務的な意味です。

変数をステップとして積み上げる

変数は「ステップ名」として連鎖していく

Power Query の「適用したステップ」は、そのまま 変数定義の連続です。

let
    SalesTable =
        Excel.CurrentWorkbook(){[Name="売上"]}[Content],

    FilteredHighAmount =
        Table.SelectRows(SalesTable, each [金額] > 1000),

    AddedTaxColumn =
        Table.AddColumn(FilteredHighAmount, "税込金額", each [金額] * 1.1)
in
    AddedTaxColumn
Power Query

ここで定義されている変数は次の通りです。

  • SalesTable:元の売上テーブル
  • FilteredHighAmount:金額が 1000 より大きい行だけを残したテーブル
  • AddedTaxColumn:税込金額列を追加したテーブル

それぞれが「名前の付いた変数」であり、 後続の処理から参照できる「箱」になっています。

変数定義をステップバイステップで理解する

ステップ1:まず「意味のある名前」を決める

悪い例:

Step1 = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
Step2 = Table.SelectRows(Step1, each [金額] > 1000),
Step3 = Table.AddColumn(Step2, "税込金額", each [金額] * 1.1)
Power Query

良い例:

SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
FilteredHighAmount = Table.SelectRows(SalesTable, each [金額] > 1000),
AddedTaxColumn = Table.AddColumn(FilteredHighAmount, "税込金額", each [金額] * 1.1)
Power Query

変数名(ステップ名)は、「何が入っているか」が分かる名前にすることが重要です。 これはセキュリティ・品質の観点からも大事で、 「意図が分からない変数」は誤操作や誤修正の原因になります。

ステップ2:変数に“テーブル・数値・リスト”などを入れる

M言語の変数は、次のようなものを入れられます。

  • 数値(例:x = 10
  • テキスト(例:Message = "OK"
  • リスト(例:Numbers = {1,2,3}
  • レコード(例:Info = [顧客コード="C001", 金額=1200]
  • テーブル(例:SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content]

実務では、テーブル変数と数値変数が特に重要です。

ステップ3:変数を再利用する

変数を定義する最大のメリットは「再利用できること」です。

let
    SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],

    FilteredHighAmount =
        Table.SelectRows(SalesTable, each [金額] > 1000),

    FilteredLowAmount =
        Table.SelectRows(SalesTable, each [金額] <= 1000)
in
    FilteredHighAmount
Power Query

ここでは、同じ SalesTable を使って「高額行」と「低額行」を別々に抽出しています。 元データを何度も読み込む必要はなく、変数として保持しておけば何度でも使えるのがポイントです。

変数定義で注意すべき重要ポイント

1. 変数名は一意でなければならない

同じ名前を二度定義すると、後の定義が前を上書きします。 意図的に上書きするならまだしも、誤って同じ名前を使うとバグの原因になります。

悪い例:

let
    SalesTable = ...,
    SalesTable = Table.SelectRows(SalesTable, each [金額] > 0)
in
    SalesTable
Power Query

これは「元の SalesTable がどこかで消えてしまう」ので、 読み手にとって非常に分かりづらいコードになります。

2. 変数名に機密情報を入れない

セキュリティの観点から、変数名やコメントに次のような情報を入れるのは避けるべきです。

  • パスワード
  • 認証トークン
  • 個人情報の具体的な値

例:これは危険です。

AdminPassword = "P@ssw0rd!"
Power Query

変数はコードの一部であり、 Power Query エディタを開ける人なら誰でも見られます。 機密情報は必ず別の安全な仕組みで管理するべきです。

3. 変数の「型」を意識する

M言語は型付き言語なので、変数に何が入っているか(型)を意識することが重要です。

  • 数値なのか
  • テキストなのか
  • テーブルなのか

例:

TotalAmount =
    List.Sum(SalesTable[金額])   // 数値

ValidSalesTable =
    Table.SelectRows(SalesTable, each [金額] > 0)   // テーブル
Power Query

型を意識せずに変数を使うと、 「テーブルだと思っていたら実は数値だった」というようなバグにつながります。

実務で使える「変数定義テンプレート」

テンプレ1:元データ+クレンジング+フィルタ

let
    // 元データを読み込む
    RawSales =
        Excel.CurrentWorkbook(){[Name="売上"]}[Content],

    // 顧客コードの表記ゆれを修正
    CleanedSales =
        Table.TransformColumns(
            RawSales,
            {{"顧客コード", Text.Trim, type text}}
        ),

    // 金額が0以下の行を除外
    ValidSales =
        Table.SelectRows(CleanedSales, each [金額] > 0)
in
    ValidSales
Power Query

ここでは、

  • RawSales:生データ
  • CleanedSales:クレンジング済みデータ
  • ValidSales:業務上有効なデータ

という3つの変数を定義しています。

テンプレ2:集計用の数値変数

let
    SalesTable = Excel.CurrentWorkbook(){[Name="売上"]}[Content],

    TotalAmount =
        List.Sum(SalesTable[金額]),

    AverageAmount =
        TotalAmount / Table.RowCount(SalesTable)
in
    [合計金額 = TotalAmount, 平均金額 = AverageAmount]
Power Query

ここでは、

  • TotalAmount:合計金額(数値)
  • AverageAmount:平均金額(数値)

を変数として定義し、 最後にレコードとしてまとめて返しています。

まとめ:変数を定義することは「処理に名前を付けること」

M言語で変数を定義することは、単に値を入れるだけではなく、 「処理に名前を付けて、意味のある単位に分割すること」です。

これによって、

  • クエリが読みやすくなる
  • 修正しやすくなる
  • 再利用しやすくなる
  • セキュリティ・品質の観点からも安全になる

というメリットが得られます。

変数定義は、実務で通用する Power Query を書くための“基礎体力”ですので、 ぜひ「意味のある名前を付けて、テーブルや数値を変数として扱う」感覚を身につけていただきたいです。

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