PR

Power Query M言語とは?書き方と基本構文を初心者向けに解説

Power Query応用
スポンサーリンク

Power Queryでのデータ加工中、「列名をステップごとに変更するのが面倒」「もっと複雑な条件分岐ができればいいのに」などと感じたことはありませんか?

あるいは、興味本位で「詳細エディター」を開いたものの、何が書いてあるか分からず、そっと画面を閉じてしまった経験があるかもしれません。

実は、Power Queryの裏側で動いているM言語を少し理解するだけで、マウス操作だけでは出来ない式の修正が可能になり、業務効率は飛躍的に向上します。

この記事では、プログラミング未経験の方でも理解できるように、M言語の仕組みと実務ですぐに使える基本構文を分かりやすく解説します。

本記事のExcelは次のバージョンを使用しています。
Microsoft® Excel® for Microsoft 365 MSO (バージョン 2512 ビルド 16.0.19530.20184) 64 ビット

スポンサーリンク

M言語(Power Query M 数式言語)とは何か

M言語は、Power BIやExcelのPower Queryで使用される、データ変換・マッシュアップのための関数型言語です。

普段、リボンメニューのボタンをクリックして「列の削除」や「型の変更」を行っていますが、実はその裏側では、操作の一つひとつがこのM言語のコードとして自動的に記述されています。

つまり、皆さんは知らず知らずのうちにM言語を作成しているのです。

Excel数式やVBAとの決定的な違い

Excelのワークシート関数やVBA(マクロ)との違いを整理します。

  • Excel関数: 「セル」単位で計算を行います。
  • VBA: 「手続き」や「操作」を自動化するための言語です。
  • M言語: 「データ(テーブル)」全体に対して、順序立てて変換処理を行うことに特化しています。

Excel関数が「このセルの値」を対象にするのに対し、M言語は「この列全体」や「テーブル全体」を対象に処理を行うイメージです。

なぜM言語を学ぶ必要があるのか

GUI(マウス操作)機能は非常に優秀ですが、万能ではありません。M言語を学ぶことで、以下のような「GUIの限界」を突破できます。

  1. 複雑な条件分岐: GUIの「条件列」よりも高度な論理判定が可能になります。
  2. 動的な処理: 今日の日付を基準にファイルパスを変えるなど、柔軟な連携が可能になります。
  3. エラーハンドリング: エラー発生時に処理を止めず、別の値を代入するといった制御が可能になります。

参考:Power Query M 数式言語リファレンス – PowerQuery M | Microsoft Learn

スポンサーリンク

M言語の基本構造「let … in」を理解する

詳細エディターを開くと、必ず目にするのが letin という単語です。これがM言語の骨組みとなります。

「let」は計算過程、「in」は最終結果

M言語のコードは、料理のレシピに例えると分かりやすくなります。

  • let: 調理の「手順」を記述する場所です。(野菜を切る → 炒める → 味付けする)
  • in: 完成した「料理」をお皿に出す場所です。(最終的にテーブルに表示したい結果)
Power Query
let
    ソース = Excel.CurrentWorkbook(){[Name="売上明細"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"売上日", type datetime}, {"商品名", type text}, {"得意先", type text}, {"数量", Int64.Type}, {"金額", Int64.Type}}),
    #"変更された型 1" = Table.TransformColumnTypes(変更された型,{{"売上日", type date}}),
    追加されたカスタム = Table.AddColumn(#"変更された型 1", "単価", each [金額] / [数量])
in
    追加されたカスタム

上記のコードでは、let の中で「ソース」→「変更された型」→「変更された型 1」→「追加されたカスタム」という順にステップが進んでいます。そして、最後に in の後ろにある「追加されたカスタム」が、Power Queryの画面に表示される結果となります。

変数名の注意点

自動生成されるコードを見ると、#"変更された型 1" のように、ハッシュタグとダブルクォーテーションで囲まれた記述が目立ちます。

これは、変数名(ステップ名)にスペースが含まれる場合の特別な書き方です。

参考:Power Query M 数式言語のクイック ツアー

スポンサーリンク

実務で必須となる基本的な文法とデータ型

M言語を手書き、あるいは修正する際に最低限知っておくべきルールを紹介します。

大文字・小文字は厳密に区別される

Excel関数では vlookup と小文字で書いても VLOOKUP と認識されますが、M言語は完全な別物として扱われます。

例えば、Text.Starttext.start と書くとエラーになります。関数名の先頭は大文字であることが多いです。

主要なデータ型と書き方

実務で頻出するデータ型の記述方法です。

  • テキスト(Text): ダブルクォーテーションで囲みます。
    • 例: "東京都"
  • 数値(Number): そのまま記述します。
    • 例: 123, 10.5
  • 日付(Date):#date 関数を使用します。
    • 例: #date(2026, 12, 31)

リスト { } とレコード [ ] の使い分け

M言語特有の構造として、「リスト」と「レコード」があります。これらはExcelの行と列の概念で理解するとスムーズです。

  • リスト { ... }: 「1つの列」のようなイメージです。データを縦に並べたものです。
    • 例: {1, 2, 3}{"A", "B", "C"}
  • レコード [ ... ]: 「1つの行」のようなイメージです。項目名(列名)と値がセットになっています。
    • 例: [ 商品名="外付けSSD 1TB, 数量=4, 金額=36000 ]

この違いを理解しておくと、例えば「特定の列だけを選択したい」場合はリスト形式 {"商品名", "金額"} で指定するなど、関数の引数を理解しやすくなります。

参考:Power Query M 言語仕様 – PowerQuery M | Microsoft Learn

スポンサーリンク

GUI操作では難しい!M言語による高度な加工の実践例

ここからは、実務で役立つ具体的なコードの書き方を紹介します。これらは「カスタム列の追加」ダイアログなどで直接記述できます。

if … then … else による条件分岐

ExcelのIF関数と同様の処理ですが、M言語では構文が異なります。

Excelの IF(条件, 真の場合, 偽の場合) とは異なり、プログラミングのように記述します。

Power Query
if [金額] >= 10000 then "高" else "低"

さらに条件を重ねる(else if)場合は以下のように書きます。

Power Query
if [金額] >= 10000 then "高"
else if [金額] >= 5000 then "中"
else "低"

改行を入れて可読性を高めるのがコツです。

try … otherwise を使ったエラーハンドリング

ExcelではIFERROR関数でエラー時の処理を書けますが、M言語でも同様の機能があります。

数量にエラーがあるテーブルをPower Queryで読み込んだとします。

単価を求めるために、金額÷数量という式を書いてしまうと、数量がエラーになっている場合、計算結果がErrorになってしまいます。

Power Query
[金額] / [数量]

try ... otherwise 構文を使用すると、エラーが発生した場合の代替値を指定できます。

Power Query
try [金額] / [数量] otherwise 0

Errorが解消されました。

エラー時の処理を書くことが出来るため、想定外のデータが混入したときにも対応できます。

参考:Power Query M 言語のエラー処理 – PowerQuery M | Microsoft Learn

スポンサーリンク

初心者が陥りがちな「M言語の罠」と対処法

詳細エディターを編集する際によくあるミスを紹介します。

カンマ(,)の付け忘れ

let の中のステップは、最後のステップを除き、行末に必ずカンマ , が必要です。

Power Query
let
    ソース = ...,     // ← ここにカンマがないとエラー!
    変更された型 = ...   
in
    変更された型

詳細エディターでステップを追加したり削除したりした際、カンマを消し忘れたり、付け忘れたりするミスが多発します。エディターの下部に「トークン ‘,’が必要です」と表示されたら、行末を確認してください。

数式バーと詳細エディターの使い分け

すべてのコードを詳細エディターで書く必要はありません。

  • 数式バー: 1つのステップ内の微修正(列名の変更や、引数の数値変更など)に適しています。
  • 詳細エディター: クエリ全体の構造変更や、複数行にわたる複雑なロジックの記述に適しています。

まずは数式バーの表示をオンにし、自動生成されたコードを眺めることから始めるのがおすすめです。

スポンサーリンク

まとめ

Power QueryのM言語は、一見難解に見えますが、基本構造である let ... in と、いくつかのデータ型のルールを理解すれば、決して怖いものではありません。

  • M言語は「データ変換の手順書」である。
  • let で手順を書き、in で結果を出す。
  • iftry を使うことで、GUIでは不可能な柔軟な処理ができる。
  • ステップ名の #"..." や行末のカンマに注意する。

まずは、GUIで作ったクエリの「詳細エディター」を開き、「どこで何をしているのか」を解読することから始めてみてください。コードの意味が分かれば、データ加工の自由度は無限に広がります。

Excel/Power Queryのデータ加工相談サービス

Excel/Power Queryのデータ加工で悩んでおり、ネットや本で調べても解決しない場合は、一度ご相談下さい。

やりたいことをヒアリングして解決までサポートいたします。

ご相談内容の例
  • 前任者が作ったExcelファイルの数式等が意味不明で困っている
  • Power Queryを使ってExcelでデータ加工を行いたいが、うまく使いこなせない
  • 手作業が多く、業務効率化を行いたいが、どう進めていいか分からない

ココナラでご相談を受け付けております。ココナラの会員登録が必要になります。

Power Queryの学習に役立つおすすめ本
初心者向け 初心者~中級者向け 中級者~上級者向け
Power Query応用
スポンサーリンク
プロフィール
たがみ

IT業界20年程度のシステムエンジニアです。
構築したシステムのデータ検証をExcelで実施することが多く、検証作業の効率化を模索しているときにPower Queryと出会いました。
Excel業務効率化の手助けになればと当ブログを開設しました。
今ではデータ分析でPower BIを活用しており、Power BI、Excelの両方でPower Queryを活用しています。

たがみをフォローする
シェアする
たがみをフォローする
タイトルとURLをコピーしました