【Excel】Power QueryのM言語で条件分岐を書く方法!Excelのカスタム列にif式を記述する構文

【Excel】Power QueryのM言語で条件分岐を書く方法!Excelのカスタム列にif式を記述する構文
🛡️ 超解決

Power Queryでデータを加工する際、特定の条件に基づいて値を変更したい場面は多いでしょう。例えば、売上金額に応じて「高」「中」「低」といったステータスを付与したい場合などです。Excelのカスタム列機能を使えば、こうした条件分岐をM言語で記述できます。この記事では、Power Queryで条件分岐を行うためのif式の構文と具体的な使い方を解説します。カスタム列にif式を記述できるようになれば、より柔軟で高度なデータ整形が可能になります。

Power Queryのカスタム列機能は、既存の列の値や他の条件に基づいて新しい列を作成する際に非常に強力です。特に、M言語のif式を理解することで、条件に応じた値の割り当てや計算を自動化できます。これにより、手作業でのデータ加工の手間を大幅に削減し、分析の精度を高めることができます。

【要点】Power QueryのM言語で条件分岐(if式)を記述する方法

  • if式: M言語で条件分岐を実現する基本的な構文です。
  • then: 条件が真(True)の場合に実行される処理を指定します。
  • else: 条件が偽(False)の場合に実行される処理を指定します。
  • カスタム列の追加: Power Queryエディターで「カスタム列の追加」機能からM言語を記述します。

ADVERTISEMENT

Power Queryのif式で条件分岐を行う基本的な構文

Power QueryのM言語では、JavaScriptなどと同様にif式を使用して条件分岐を記述します。基本的な構文は以下の通りです。

if [条件] then [真の場合の処理] else [偽の場合の処理]

ここで、[条件]には比較演算子(=, <>, <, >, <=, >=)や論理演算子(and, or, not)を用いた、真偽を判定できる式を記述します。例えば、ある列の値が10より大きいかどうかを判定する条件は `[列名] > 10` となります。if式はネスト(入れ子)にして、複数の条件を段階的に判定することも可能です。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

カスタム列にif式を記述する手順

実際にPower Queryエディターでカスタム列を作成し、if式を記述する手順を説明します。ここでは例として、「売上」列の値が10000以上であれば「Aランク」、5000以上であれば「Bランク」、それ以外は「Cランク」と判定する新しい列「売上ランク」を作成します。

  1. Power Queryエディターを開く
    Excelの「データ」タブから「データの取得と変換」グループにある「テーブルまたは範囲から」を選択し、Power Queryエディターを起動します。
  2. カスタム列の追加
    Power Queryエディターのリボンメニューから「列の追加」タブを選択し、「カスタム列」をクリックします。
  3. カスタム列の追加ダイアログ
    「カスタム列の追加」ダイアログが表示されます。「新しい列名」に「売上ランク」と入力します。
  4. M言語の記述
    「カスタム列の式」に以下のM言語を記述します。

    if [売上] >= 10000 then "Aランク" else if [売上] >= 5000 then "Bランク" else "Cランク"

  5. OKをクリック
    入力が完了したら、「OK」ボタンをクリックします。
  6. 結果の確認
    新しい「売上ランク」列が追加され、条件に応じた値が表示されていることを確認します。
  7. 閉じて読み込む
    「ホーム」タブの「閉じて読み込む」から、結果をExcelシートに反映させます。

if式でよくある失敗パターンと対処法

Power Queryでif式を記述する際に、意図しない結果になったりエラーが発生したりするケースがいくつかあります。ここでは、よくある失敗パターンとその対処法を解説します。

条件判定でエラーが発生する

if式の条件部分で、列のデータ型が原因でエラーが発生することがあります。例えば、数値として扱いたい列がテキスト型になっている場合、数値比較ができずにエラーとなります。

原因: 列のデータ型が条件判定に適していない。

対処法: if式を記述する前に、該当する列のデータ型を正しいものに変換します。Power Queryエディターの「ホーム」タブにある「データ型」の変更機能や、M言語の `Number.From()` 関数などを使用します。

例: `if Number.From([売上]) >= 10000 then “Aランク” else “Cランク”`

then節またはelse節の記述ミス

if式では、条件が真の場合(then節)と偽の場合(else節)に実行する処理を必ず記述する必要があります。どちらか一方を忘れると構文エラーになります。

原因: then節またはelse節の記述漏れ。

対処法: if式は必ず `if [条件] then [真の場合の処理] else [偽の場合の処理]` の形式になっているか確認します。特に、ネストしたif式では、各if文に対応するthen節とelse節が正しく配置されているか注意深く確認してください。

文字列リテラルの引用符の誤り

then節やelse節で文字列を返す場合、ダブルクォーテーション (`”`) で囲む必要があります。シングルクォーテーション (`’`) を使用したり、引用符を付け忘れたりするとエラーになります。

原因: 文字列リテラルを正しく引用符で囲んでいない。

対処法: 文字列を返す場合は、必ずダブルクォーテーション (`”`) で囲んでください。例えば、「Aランク」と表示したい場合は `”Aランク”` と記述します。

ネストしたif式の条件順序

複数の条件をネストして記述する場合、条件の順序が重要になります。より厳密な条件から先に判定しないと、意図しない結果になることがあります。

原因: 条件の判定順序が不適切。

対処法: 上記の例のように、最も厳しい条件(例: 10000以上)から順に記述し、徐々に条件を緩めていく(例: 5000以上)ようにします。これにより、各条件が正しく適用されるようになります。

ADVERTISEMENT

Power Queryのif式と他のM言語関数の組み合わせ

Power Queryのif式は、他のM言語関数と組み合わせて使用することで、さらに高度なデータ加工が可能になります。ここでは、いくつかの組み合わせ例を紹介します。

null値の判定と置換

if式と `Value.Is(null, …)` 関数を組み合わせることで、列にnull値が含まれているかどうかを判定し、必要に応じて別の値に置換できます。

例: `if Value.Is([数量], null) then 0 else [数量]` (数量がnullなら0、そうでなければ数量の値を表示)

この例では、`Value.Is()` 関数でnull値を判定し、nullであれば`then`節で0を、そうでなければ`else`節で元の`[数量]`の値を返します。

日付やテキストの条件判定

if式は、日付やテキストデータに対しても使用できます。日付の比較や、テキストの一部が特定の文字列と一致するかどうかの判定などが可能です。

例1(日付判定): `if [注文日] < Date.From(DateTime.LocalNow()) then "過去" else "未来"` (注文日が今日より前なら「過去」、そうでなければ「未来」)

例2(テキスト部分一致): `if Text.Contains([商品名], “限定”) then “限定品” else “通常品”` (商品名に「限定」が含まれていれば「限定品」、そうでなければ「通常品」)

これらの例では、日付関数 `Date.From()` やテキスト関数 `Text.Contains()` とif式を組み合わせています。

リストやレコードの操作との組み合わせ

より複雑なデータ構造であるリストやレコードに対しても、if式を適用できます。例えば、リストの要素数に応じて処理を分岐させたり、レコード内の特定のフィールド値を参照して条件判定を行ったりすることが可能です。

例: `if List.Count([タグリスト]) > 3 then “多タグ” else “少タグ”` ([タグリスト]の要素数が3より多ければ「多タグ」、そうでなければ「少タグ」)

このように、if式はPower Queryの様々な関数と連携し、データ加工の幅を広げます。

M言語のif式とExcelのIF関数の違い

Excelのワークシート関数にもIF関数がありますが、Power QueryのM言語のif式とはいくつかの違いがあります。これらの違いを理解しておくことで、Power Queryでのデータ加工がよりスムーズになります。

項目 Power Query (M言語) if式 Excel IF関数
構文 if [条件] then [真の場合] else [偽の場合] IF(条件, 真の場合, 偽の場合)
適用範囲 Power Queryエディター内でのデータ整形・変換 Excelワークシート上での計算・条件分岐
データ型 厳密なデータ型変換が必要な場合がある 比較的緩やかな型推論
ネスト if式を入れ子にして複数条件を記述可能 IF関数を入れ子にして複数条件を記述可能
null値の扱い `Value.Is(null, …)`などで明示的に判定 通常、空のセルとして扱われる
大文字小文字 テキスト比較はデフォルトで大文字小文字を区別する テキスト比較はデフォルトで大文字小文字を区別しない

M言語のif式は、Power Queryの強力なデータ変換エンジンの一部として機能します。ExcelのIF関数が主に表計算のセル計算に使われるのに対し、M言語のif式はデータソースからExcelシートに読み込まれる前の段階で、データ構造そのものを整形するために使われます。また、M言語はデータ型に厳密なため、数値計算や文字列操作を行う際には、意図したデータ型になっているか確認することが重要です。

まとめ

Power QueryのM言語におけるif式は、カスタム列を作成する際に条件分岐を行うための基本的な構文です。このif式を使いこなすことで、「if 条件 then 処理1 else 処理2」という形式で、指定した条件に応じて異なる値を新しい列に設定できます。さらに、if式をネストさせたり、他のM言語関数と組み合わせたりすることで、より複雑で柔軟なデータ加工が可能になります。Power Queryのif式を理解し、適切に活用することで、Excelでのデータ分析やレポート作成の効率と精度を格段に向上させることができるでしょう。

まずは簡単な条件分岐から試してみて、徐々に複雑な条件設定に挑戦してみてください。特に、売上ランク付けやステータス管理など、ビジネスシーンで頻繁に登場する条件付きのデータ整形にif式は威力を発揮します。Power Queryの他の関数(例: `Text.Start`や`Date.Month`など)と組み合わせることで、さらに高度なデータ分析の準備が整います。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】