なぜ「Mコードを読みやすく整形する」ことが重要なのか
Power QueryのMコードは、GUI操作だけでも自動生成されますが、そのままだと
- 1行が長くて読みにくい
- どこで何をしているのか分かりにくい
- 条件や型変換の意図が伝わりにくい という状態になりやすいです。
実務では、「自分以外の誰かが後から読む」「自分が数ヶ月後に読み返す」ことがほぼ確実に起こります。 そのときに、読みやすく整形されたMコードになっているかどうかが、
- バグの発見しやすさ
- セキュリティ・品質レビューのしやすさ
- 保守・改修のスピード に直結します。
ここでは、初心者向けに、Mコードを読みやすく整形する具体的な考え方とテクニックを、ステップバイステップで解説していきます。
基本の整形ルールを押さえる
ステップごとに「1行1役割」を意識する
Mコードの基本構造は、次のような「ステップの連鎖」です。
let
Source = ...,
Step1 = ...,
Step2 = ...,
Step3 = ...
in
Step3
Power Queryここで大事なのは、「1つのステップは1つの役割に絞る」という意識です。
悪い例(詰め込みすぎ):
FilteredSorted =
Table.Sort(
Table.SelectRows(
Table.TransformColumnTypes(Source, {{"金額", type number}}),
each [金額] > 1000
),
{{"金額", Order.Descending}}
)
Power Query良い例(役割を分ける):
Typed =
Table.TransformColumnTypes(
Source,
{{"金額", type number}}
),
Filtered =
Table.SelectRows(
Typed,
each [金額] > 1000
),
Sorted =
Table.Sort(
Filtered,
{{"金額", Order.Descending}}
)
Power Queryこのように、
- 型変換
- フィルタ
- 並べ替え を別々のステップに分けることで、「どこで何をしているか」が一目で分かるようになります。
引数は「縦に並べる」ことで読みやすくする
Mの関数は、引数が増えると一気に読みにくくなります。 そのときに有効なのが、「引数を縦に並べる」整形です。
悪い例(横に詰め込み):
Table.TransformColumnTypes(Source, {{"顧客コード", type text}, {"顧客名", type text}, {"金額", type number}, {"売上日", type date}})
Power Query良い例(縦に整形):
Table.TransformColumnTypes(
Source,
{
{"顧客コード", type text},
{"顧客名", type text},
{"金額", type number},
{"売上日", type date}
}
)
Power Queryこのように整形することで、
- どの列にどの型を設定しているか
- 列の追加・削除・修正がどこに書かれているか が一目で分かるようになります。
「引数が2つ以上ある関数は、縦に並べる」というルールを持っておくと、コードがぐっと読みやすくなります。
ステップバイステップで整形してみる
ステップ1:自動生成されたコードをそのまま眺める
まず、GUIで作ったクエリのMコードを詳細エディターで開きます。 自動生成されたコードは、だいたい次のような感じになっていることが多いです。
let
ソース = Excel.CurrentWorkbook(){[Name="売上"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース, {{"顧客コード", type text}, {"顧客名", type text}, {"金額", type number}, {"売上日", type any}}),
フィルター行 = Table.SelectRows(変更された型, each [金額] > 0),
並べ替え済みの行 = Table.Sort(フィルター行, {{"金額", Order.Descending}})
in
並べ替え済みの行
Power Queryここから、
- どこが読みにくいか
- どこを分けたほうがよいか を見つけていきます。
ステップ2:長い行を「改行+インデント」で分解する
次に、長い行を「改行+インデント」で分解します。
整形後の例:
let
ソース =
Excel.CurrentWorkbook(){[Name="売上"]}[Content],
変更された型 =
Table.TransformColumnTypes(
ソース,
{
{"顧客コード", type text},
{"顧客名", type text},
{"金額", type number},
{"売上日", type any}
}
),
フィルター行 =
Table.SelectRows(
変更された型,
each [金額] > 0
),
並べ替え済みの行 =
Table.Sort(
フィルター行,
{{"金額", Order.Descending}}
)
in
並べ替え済みの行
Power Queryここでのポイントは、
=の右側を改行してインデントする- 関数名の後ろに改行し、引数を縦に並べる
{ ... }の中身も縦に並べる
という3つです。
「右辺は必ず改行してインデントする」という癖をつけると、コード全体が自然と読みやすくなります。
ステップ3:ステップ名に「役割」を込める
整形とセットで重要なのが、ステップ名の付け方です。
悪い例:
Step1 =
...,
Step2 =
...,
Power Query良い例:
Source =
...,
Typed =
...,
FilteredPositiveSales =
...,
SortedByAmount =
...
Power Query日本語でも構いませんが、
- 「何をしているステップか」
- 「何を前提としているステップか」 が分かる名前にしておくと、依存関係が読みやすくなります。
例:セキュリティ・品質を意識した名前付け
Typed =
Table.TransformColumnTypes(...),
ValidRowsOnly =
Table.SelectRows(
Typed,
each [顧客コード] <> null and [顧客コード] <> "" and [金額] > 0
),
AdminUsersOnly =
Table.SelectRows(
ValidRowsOnly,
each [Role] = "Admin"
)
Power Queryこのように、ステップ名だけで「このステップは何を保証しているか」が伝わるようにしておくことは、セキュリティと品質の両面で非常に重要です。
条件式・カスタム列を読みやすく整形する
if 文は「縦に書いて構造を見せる」
条件分岐を含む式は、横に書くと一気に読みにくくなります。
悪い例:
each if [金額] = null then null else if [金額] > 100000 then "大口" else "通常"
Power Query良い例:
each
if [金額] = null then
null
else if [金額] > 100000 then
"大口"
else
"通常"
Power Queryこのように、
if/then/elseを縦に並べる- 条件ごとに改行する
- インデントで「ネストの深さ」を見せる
ことで、「どの条件でどの値を返しているか」が視覚的に分かるようになります。
複雑な条件は「論理ブロックごとに改行する」
複数の条件を組み合わせる場合も、縦に整形すると読みやすくなります。
悪い例:
each [顧客コード] <> null and [顧客コード] <> "" and [金額] <> null and [金額] > 0 and [IsActive] = true
Power Query良い例:
each
[顧客コード] <> null
and [顧客コード] <> ""
and [金額] <> null
and [金額] > 0
and [IsActive] = true
Power Queryさらに、意味ごとにコメントを付けると、セキュリティ・品質の意図が明確になります。
each
// 顧客コードが有効
[顧客コード] <> null
and [顧客コード] <> ""
// 金額が有効
and [金額] <> null
and [金額] > 0
// アクティブユーザーのみ
and [IsActive] = true
Power Query「条件式は、意味ごとに改行+コメント」で整形することで、後から読む人が安心してレビューできるコードになります。
コメントを使って「意図」を残す
「何をしているか」ではなく「なぜそうしているか」を書く
コメントは、
- コードを説明するため というより、
- 「この条件・この型・このフィルタには、どんな意図があるか」を残すため に使うと効果的です。
例:型変換ステップのコメント
Typed =
// 以降のステップは、金額を数値として扱う前提。
Table.TransformColumnTypes(
Source,
{
{"顧客コード", type text},
{"顧客名", type text},
{"金額", type number},
{"売上日", type date}
}
),
Power Query例:セキュリティチェックのコメント
AllowedUsersOnly =
Table.SelectRows(
Typed,
each
// 管理者かつアクティブかつ承認済みユーザーのみ許可
[Role] = "Admin"
and [IsActive] = true
and [ApprovalFlag] = "Y"
),
Power Query「このステップは何を保証しているか」「後続ステップは何を前提にしているか」をコメントで明示することは、セキュリティと品質の観点から非常に重要です。
実務で使える「整形済みMコード」テンプレート
売上クエリの読みやすい基本形
let
// 1. 元データ
Source =
Excel.CurrentWorkbook(){[Name="売上"]}[Content],
// 2. 型を整える(以降はこの型を前提)
Typed =
Table.TransformColumnTypes(
Source,
{
{"顧客コード", type text},
{"顧客名", type text},
{"金額", type number},
{"売上日", type date}
}
),
// 3. 金額が正の行のみ(売上のみを対象)
PositiveSalesOnly =
Table.SelectRows(
Typed,
each [金額] > 0
),
// 4. 消費税額列を追加
AddedTaxAmount =
Table.AddColumn(
PositiveSalesOnly,
"消費税額",
each [金額] * 0.1,
type number
),
// 5. 金額で降順ソート
SortedByAmount =
Table.Sort(
AddedTaxAmount,
{{"金額", Order.Descending}}
)
in
SortedByAmount
Power Queryまとめ:「Mコードを読みやすく整形する」は“クエリを守るための習慣”
Mコードを読みやすく整形するというのは、 単に見た目をきれいにするだけではなく、
「クエリの意図・前提・依存関係・セキュリティルールを、誰が読んでも分かる形で残す」
ための習慣です。
そのために、
- ステップごとに1役割に絞る
- 右辺は改行+インデントで整形する
- 引数・条件・if 文は縦に並べる
- ステップ名に役割と前提を込める
- コメントで「なぜそうしているか」を残す
というルールを、自分なりに持っておくことが大切です。
読みやすく整形されたMコードは、
- バグを見つけやすく
- セキュリティレビューがしやすく
- チームで共有しやすく
- 将来の自分にも優しい
「実務で使えるPower Query」の土台になります。 ぜひ、Mコードを書くたびに「整形してから保存する」を当たり前の習慣にしていってください。

