実務で使えるPower Query小技・テクニック | M言語・基本操作:M言語の基本構文を理解する

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

M言語の基本構文を理解する

Power Query(M言語)を「難しいプログラミング言語」と感じる方は多いですが、実務で使う範囲なら“型さえつかめば怖くない”言語です。ここでは、初心者でも迷わず書けるように、ステップバイステップで構文の仕組みをかみ砕いて解説します。 M言語の理解は、Power Queryの自動生成コードを読めるようになるだけでなく、自分で処理を追加したり、テンプレート化したりできる力につながります。

M言語の基本構造をつかむ

M言語の最も重要なポイントは、「let ~ in」構造で処理を順番に積み上げる」という考え方です。 これは、Power Queryのすべてのクエリに共通する“骨格”です。

let ~ in の基本形

まずは最小構文を見てみましょう。

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

このコードは「10 を 2倍した結果(20)を返す」だけのシンプルな例です。 ここで理解すべきは次の点です。

let:変数や処理ステップを定義する場所 in:最終的に返す値を指定する場所

Power Queryのクエリは、ほぼすべてこの形になっています。 つまり、let の中で処理を積み上げ、in で最終結果を返すという流れです。

ステップを積み上げるという発想

M言語では、処理を「ステップ」として順番に積み上げていきます。 Power Queryの画面で表示される「適用したステップ」がそのまま M の let 内に並びます。

実例:テーブルを読み込み、列を追加する

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

このコードの流れはこうです。

  1. Source:Excelのテーブル「売上」を読み込む
  2. AddedColumn:読み込んだテーブルに「金額2倍」列を追加する
  3. in AddedColumn:最終的に返すのは「列追加後のテーブル」

この「ステップを積み上げる」感覚が、M言語の最重要ポイントです。

ステップ名は“変数名”である

Power Queryのステップ名は、実はそのまま「変数名」です。 つまり、次のステップで前のステップを参照する仕組みになっています。

let
    Step1 = ...,
    Step2 = Step1 + 10,
    Step3 = Step2 * 3
in
    Step3
Power Query

このように、ステップ名は自由に変えられるので、読みやすい名前にするのが実務では重要です。

each の意味を理解する

M言語初心者が最初につまずくポイントが each です。 これは「行ごとの処理」を表すキーワードです。

例:列を追加する

Table.AddColumn(Source, "金額2倍", each [金額] * 2)
Power Query

ここでの each は「各行に対して」という意味で、 [金額] は「その行の金額列の値」を指します。

深掘り:each の正体

実は each は次のような関数の省略形です。

(x) => x[金額] * 2
Power Query

つまり、each は「匿名関数(ラムダ式)」の短縮記法なのです。 これを理解すると、複雑な処理も怖くなくなります。

レコード・リスト・テーブルの違いを理解する

M言語では、データ構造がとても重要です。 特に次の3つは必ず理解しておくべきです。

レコード(Record)

1行分のデータ 例:

[顧客コード="C001", 金額=1200]
Power Query

リスト(List)

1列分のデータ 例:

{"A001", "A002", "A003"}
Power Query

テーブル(Table)

行と列を持つ表形式データ 例:

#table({"顧客コード","金額"}, {{"C001",1200},{"C002",800}})
Power Query

Power Queryのほぼすべての処理は「テーブル」を中心に動きます。 そのため、レコード・リスト・テーブルの違いを理解することが、M言語の理解に直結します。

実務で使う基本テンプレート

ここでは、実務でよく使う「基本構文テンプレ」を紹介します。

テンプレ1:列追加

let
    Source = ...,
    Added = Table.AddColumn(Source, "新列", each [既存列] * 2)
in
    Added
Power Query

テンプレ2:行フィルタ

let
    Source = ...,
    Filtered = Table.SelectRows(Source, each [金額] > 1000)
in
    Filtered
Power Query

テンプレ3:列変換

let
    Source = ...,
    Changed = Table.TransformColumns(Source, {{"金額", each _ * 1.1, type number}})
in
    Changed
Power Query

テンプレ4:複数ステップを積み上げる

let
    Source = ...,
    Step1 = Table.SelectRows(Source, each [金額] > 1000),
    Step2 = Table.AddColumn(Step1, "金額2倍", each [金額] * 2),
    Step3 = Table.Sort(Step2, {{"金額2倍", Order.Descending}})
in
    Step3
Power Query

M言語を読み解くコツ

初心者が最初に覚えるべき「読み解きのコツ」は次の3つです。

1. let の中は「上から順番に処理している」

Power Queryのステップと同じ順番です。

2. in の値が「最終結果」

どれだけステップがあっても、返すのは in の値だけです。

3. each は「行ごとの処理」

行単位の処理が出てきたら、each の意味を思い出すと理解が進みます。

まとめ:M言語は“構造”さえ理解すれば怖くない

M言語は、見た目がプログラミング言語っぽいので難しく感じますが、 実は次の3つを理解すれば一気に読み書きできるようになります。

let ~ in の構造 ステップを積み上げるという発想 each の意味(行ごとの処理)

この3つが分かれば、Power Queryの自動生成コードを読めるようになり、 自分で処理を追加したり、テンプレート化したりできるようになります。

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