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このコードの流れはこうです。
- Source:Excelのテーブル「売上」を読み込む
- AddedColumn:読み込んだテーブルに「金額2倍」列を追加する
- 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 QueryPower 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 QueryM言語を読み解くコツ
初心者が最初に覚えるべき「読み解きのコツ」は次の3つです。
1. let の中は「上から順番に処理している」
Power Queryのステップと同じ順番です。
2. in の値が「最終結果」
どれだけステップがあっても、返すのは in の値だけです。
3. each は「行ごとの処理」
行単位の処理が出てきたら、each の意味を思い出すと理解が進みます。
まとめ:M言語は“構造”さえ理解すれば怖くない
M言語は、見た目がプログラミング言語っぽいので難しく感じますが、 実は次の3つを理解すれば一気に読み書きできるようになります。
let ~ in の構造 ステップを積み上げるという発想 each の意味(行ごとの処理)
この3つが分かれば、Power Queryの自動生成コードを読めるようになり、 自分で処理を追加したり、テンプレート化したりできるようになります。

