実務で使えるPower Query小技・テクニック | M言語・基本操作:let … in の使い方

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

let … in の使い方

let … in の使い方を“構造から理解する”

Power Query(M言語)を初めて触る多くのユーザーが最初に戸惑うのが let … in の構造です。 しかし、実務で使う範囲なら「仕組みを一度理解すれば一生使える」ほどシンプルで強力な構文です。 ここでは、初心者でも迷わず書けるように、ステップバイステップで let … in をかみ砕いて解説します。

let … in は「処理の箱」と「出口」を作る構文

let は“処理ステップを並べる場所”

M言語のクエリは、ほぼすべて次の形で始まります。

let
    Step1 = ...,
    Step2 = ...,
    Step3 = ...
in
    Step3
Power Query

ここで理解すべき最重要ポイントは次の2つです。

let:処理ステップ(変数)を上から順番に定義する場所 in:最終的に返す値(テーブル・リスト・レコードなど)を指定する場所

Power Queryの「適用したステップ」は、この let の中身そのものです。 つまり、画面で見ているステップ=M言語の let 内の変数定義なのです。

let の中身は“変数定義”であり“処理の積み上げ”

ステップ名はそのまま変数名

Power Queryのステップ名は、実はそのまま「変数名」です。 次のステップで前のステップを参照することで、処理を積み上げていきます。

let
    Source = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
    Filtered = Table.SelectRows(Source, each [金額] > 1000),
    Added = Table.AddColumn(Filtered, "金額2倍", each [金額] * 2)
in
    Added
Power Query

流れはこうです。

  1. Source:売上テーブルを読み込む
  2. Filtered:金額が 1000 より大きい行だけ残す
  3. Added:金額2倍列を追加する
  4. in Added:最終結果として「列追加後のテーブル」を返す

この「ステップを積み上げる」という発想が、M言語の本質です。

let … in をステップバイステップで理解する

ステップ1:最小構文を読む

まずは最もシンプルな例を見てみます。

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

これは「10 を 2倍した結果(20)を返す」だけのコードです。 ここで重要なのは、

in の値が最終結果になる

ということです。 どれだけ let の中にステップがあっても、返すのは in の値だけです。

ステップ2:テーブルを扱う例に進む

実務ではテーブルを扱うことがほとんどです。

let
    Source = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
    Added = Table.AddColumn(Source, "税込金額", each [金額] * 1.1)
in
    Added
Power Query

このコードは、

  • 売上テーブルを読み込み
  • 税込金額列を追加し
  • その結果を返す

という流れです。

ステップ3:複数ステップを積み上げる

実務では、複数の処理を順番に積み上げることが多いです。

let
    Source = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
    Filtered = Table.SelectRows(Source, each [金額] > 1000),
    Added = Table.AddColumn(Filtered, "金額2倍", each [金額] * 2),
    Sorted = Table.Sort(Added, {{"金額2倍", Order.Descending}})
in
    Sorted
Power Query

このように、前のステップを次のステップで参照することで、 処理を積み上げていきます。

let … in を使いこなすための“深掘りポイント”

1. let の中は「上から順番に評価される」

M言語は宣言型ですが、let の中は上から順番に評価されます。 つまり、次のステップで前のステップを参照できるのはこのためです。

2. in は「出口」なので1つしか書けない

in の後に書けるのは 1つの値だけです。 そのため、複数の結果を返したい場合は、テーブルやレコードにまとめて返します。

例:

in
    [正常行 = ValidTable, エラー行 = ErrorTable]
Power Query

3. ステップ名は自由に変えられる

Power Queryが自動生成するステップ名は「ChangedType」「AddedCustom」などですが、 実務では読みやすい名前に変えることを強くおすすめします。

例:

FilteredHighValueRows
AddedTaxColumn
SortedByAmount
Power Query

読みやすさは、保守性に直結します。

実務で使える let … in テンプレート集

テンプレ1:基本構造

let
    Source = ...,
    Step1 = ...,
    Step2 = ...
in
    Step2
Power Query

テンプレ2:フィルタ+列追加

let
    Source = ...,
    Filtered = Table.SelectRows(Source, each [数量] > 0),
    Added = Table.AddColumn(Filtered, "金額", each [数量] * [単価])
in
    Added
Power Query

テンプレ3:複数処理を積み上げる

let
    Source = ...,
    Cleaned = Table.TransformColumns(Source, {{"顧客コード", Text.Trim, type text}}),
    Valid = Table.SelectRows(Cleaned, each [顧客コード] <> ""),
    Final = Table.Sort(Valid, {{"顧客コード", Order.Ascending}})
in
    Final
Power Query

let … in を理解すると何ができるようになるか

実務でのメリットは圧倒的です

let … in を理解すると、次のようなことができるようになります。

  • Power Queryの自動生成コードを読める
  • 自分でステップを追加できる
  • クレンジング処理をテンプレート化できる
  • 複雑な処理を「構造化」して書ける
  • 他の人が書いた M コードを理解できる

つまり、Power Query を“使う側”から“操る側”に進化できるのです。

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