Power Query M言語とは?初心者でもわかる基本構造と使い方を徹底解説!

Power Queryの裏側で動いている「M言語」は、データの変換や整形を自動化するための強力なスクリプト言語です。
ExcelやPower BIを使っていると、クエリエディタの中に見慣れないコードが表示されることがありますが、それがまさにM言語です。
この記事では、M言語の基本構造から、実際の使い方、応用例までをわかりやすく解説します。
「なんとなく操作で済ませていたけど、M言語を理解して効率化したい」という方にぴったりの内容です。


M言語とは?Power Queryの心臓部を理解しよう

Power Query M言語(以下、M言語)は、Microsoftが開発したデータ変換専用の関数型言語です。
ExcelやPower BIの「クエリエディタ」で行う操作は、すべて内部的にM言語のコードとして記録されています。
つまり、ボタン操作で行う変換も、裏ではM言語のスクリプトが実行されているのです。

M言語は「関数型プログラミング言語」と呼ばれ、手続き的に「こうやる」と命令するのではなく、「何をしたいか」を定義していくスタイルです。
たとえば、テーブルの列をフィルタする操作を行うと、自動的に次のようなコードが生成されます。

= Table.SelectRows(前のステップ, each [売上] > 10000)

このように、関数と条件を組み合わせて「データをどう変換するか」を指定します。
PythonやVBAのように長いロジックを書かず、シンプルに目的を記述できるのが特徴です。


M言語の構造を理解しよう

M言語は、基本的に「ステップ」と呼ばれる処理の連続で構成されています。
Power Queryエディタで表示される各ステップ(例:ソース、列の削除、並べ替えなど)は、M言語の1行のコードとして記録されます。

基本構文は次のようになります。

let
    ソース = Excel.CurrentWorkbook(){[Name="売上データ"]}[Content],
    フィルタ = Table.SelectRows(ソース, each [売上] > 10000),
    並べ替え = Table.Sort(フィルタ, {{"売上", Order.Descending}})
in
    並べ替え

この構文では以下のような流れになります。

  • let:処理の開始。変数を定義していく部分です。
  • in:最終的に返す結果(テーブルや値)を指定します。
  • =:変数に対して関数の結果を代入します。
  • ,(カンマ):複数のステップを区切るために使用します。

つまり、letブロックで複数の変換処理を定義し、inで最終結果を返すという構造になっています。
この仕組みを理解することで、自分でステップを追加したり、不要な処理を削除したりと柔軟な編集が可能になります。


よく使われるM言語の関数一覧

M言語には数百もの関数が存在しますが、日常的なデータ処理でよく使われる代表的な関数を紹介します。

分類関数名概要
テーブル操作Table.SelectRows条件を満たす行を抽出
テーブル操作Table.AddColumn新しい列を追加
テーブル操作Table.RemoveColumns指定した列を削除
並べ替えTable.Sort指定した列でソート
グループ化Table.Group集計やグルーピング
型変換Table.TransformColumnTypes列のデータ型を変更
文字列操作Text.Upper文字列を大文字に変換
文字列操作Text.Contains指定文字列が含まれるか判定
日付操作Date.Year年を抽出
日付操作Date.AddDays日付を加算・減算

これらを組み合わせることで、Excelで複雑な処理をしていたデータ整形を、一瞬で自動化できるのがM言語の強みです。


実践例:特定の条件でフィルタして集計する

ここでは、売上データを「特定の支店の売上のみ抽出し、月別に集計する」例を見てみましょう。

let
    ソース = Excel.CurrentWorkbook(){[Name="売上データ"]}[Content],
    支店抽出 = Table.SelectRows(ソース, each [支店] = "東京"),
    日付型変換 = Table.TransformColumnTypes(支店抽出, {{"日付", type date}}),
    月追加 = Table.AddColumn(日付型変換, "月", each Date.Month([日付])),
    グループ化 = Table.Group(月追加, {"月"}, {{"合計売上", each List.Sum([売上]), type number}})
in
    グループ化

このコードでは、

  1. データを読み込み(ソース
  2. 東京支店のデータを抽出(Table.SelectRows
  3. 日付列を正しい型に変換
  4. 月列を追加
  5. 月ごとの売上合計を集計
    という流れになっています。

M言語を理解していると、GUI操作よりも細かく柔軟な集計ロジックを組めるようになります。


M言語を使いこなすコツ

① 自動生成されたコードを観察する

Power Queryで操作を行うと、自動的にMコードが右側のエディタに生成されます。
そのコードを見て、どの関数が使われているかを確認することで、少しずつM言語の文法に慣れていけます。

② 手動で編集してみる

ステップ名を変更したり、条件を追加したりして、コードを直接修正する練習をしましょう。
特に、条件式の部分(each [列名] > 100など)を変えてみるのが理解を深める近道です。

③ 関数を分解して考える

M言語は「小さな処理の積み重ね」で構成されます。
複雑なコードも、1ステップずつ分けて考えるとシンプルに理解できます。
「この行では何をしているのか?」を意識して読む癖をつけると良いでしょう。


M言語とExcel VBAの違い

Excelに慣れている方の中には「M言語はVBAと何が違うの?」と疑問に思う方も多いです。
主な違いを以下にまとめます。

項目M言語VBA
タイプ宣言的(関数型)命令的(手続き型)
処理対象データ変換・整形Excel操作全般
実行環境Power QueryExcel本体
メリット自動記録され、再現性が高い柔軟だがミスのリスクあり
コード記述シンプルで短い比較的冗長

M言語は「データ処理に特化したExcelの補助エンジン」と考えるとわかりやすいです。
複雑なマクロを書くよりも、Power Queryで処理を組み立てた方が、保守性や再利用性に優れています。


応用:カスタム関数を作成する

M言語では、自分で関数を定義して使うこともできます。
たとえば「税抜価格から消費税込み価格を求める関数」を作る場合、次のように書けます。

(価格 as number) as number =>
    let
        税率 = 0.1,
        税込 = 価格 * (1 + 税率)
    in
        税込

この関数を「AddTax」という名前で保存すれば、次のように呼び出せます。

= Table.AddColumn(売上データ, "税込価格", each AddTax([価格]))

このようにカスタム関数を使うことで、同じ処理を繰り返す手間を大幅に減らせます。


まとめ

Power Query M言語は、データ整形を効率化するための強力なツールです。
見慣れない構文に最初は戸惑うかもしれませんが、構造を理解してしまえば、GUI操作よりも柔軟にデータを扱えるようになります。

  • M言語はPower Queryの内部で動く関数型言語
  • letin が基本構文
  • Table.SelectRows などの関数で変換処理を定義
  • 自動生成されたコードを観察・修正することで理解が深まる
タイトルとURLをコピーしました