「売上金額が10万円以上なら A、5万円以上なら B、それ以外は C」のように、条件に応じて値を変える列は、Power Queryでは次の2つの方法で作れます。

  • 「条件列」画面: 画面上の選択と入力だけで作れる。単純な条件分岐に向いている
  • M言語の if then else: 「カスタム列」に式を書く。and/orの組み合わせやnullの判定など、細かい条件を書ける

この記事では両方の作り方と、条件列で起きやすいエラー(nullや型の違い)の原因と対処を説明します。

例として使う表

受注ID 売上金額 地域 商品名 受注日
1001 120000 東京 業務用プリンター 2026/04/02
1002 65000 大阪 トナーセット 2026/04/05
1003 null 京都 サンプル品 2026/04/07
1004 30000 東京 用紙 2026/03/28

売上金額 は数値型、受注日 は日付型に設定してあるものとします。

先に列のデータ型をそろえる

条件列を作る前に、条件に使う列の見出しの左にあるアイコンを確認します。

  • 123 や 1.2: 数値
  • ABC: テキスト
  • ABC123: 型が決まっていない(any)
  • カレンダーのアイコン: 日付

金額の列がテキスト型のまま「10万以上」のような条件を作ると、エラーになったり、条件がまったく一致しなかったりします(詳しくは後述)。条件列を作る前に、「変換」タブの「データ型」で列の型を設定しておきます。

方法1: 「条件列」画面で作る

  1. 「列の追加」タブ→「条件列」を開く
  2. 「新しい列名」に ランク と入力する
  3. 1行目の条件を入力する
    • 列名: 売上金額
    • 演算子: 「次の値以上」(表示名はバージョンによって少し異なります)
    • 値: 100000
    • 出力: A
  4. 「句の追加」を押して、2行目の条件を入力する
    • 列名: 売上金額 / 演算子: 「次の値以上」 / 値: 50000 / 出力: B
  5. 「それ以外の場合」に C と入力する
  6. 「OK」を押す

条件は上から順に判定される

条件列は、上の条件から順に判定し、最初に当てはまった条件の出力を返します。上の例で5万以上の条件を1行目に置くと、12万円の行も5万以上に当てはまるため、A ではなく B になります。範囲を分ける条件では、厳しい条件(大きい値)を上に置くのが基本です。条件の順番は、各行の右にあるメニュー(「…」)から並べ替えられます。

値と出力の欄の左にあるボタンで、固定の値ではなく「列」を選べる場合があります。たとえば、「売上金額」が「目標金額」の列以上なら「達成」とする、といった条件も作れます。

作られた式を確認する

「OK」を押すと、数式バー(表示されていない場合は「表示」タブ→「数式バー」)に次のような式が表示されます。

= Table.AddColumn(#"変更された型", "ランク", each if [売上金額] >= 100000 then "A" else if [売上金額] >= 50000 then "B" else "C")

条件列の画面は、この if then else の式を自動で作っています。条件を直したいときは、「適用したステップ」で該当するステップの歯車アイコンを押すと、画面を開き直せます。

作った直後の列は、型が ABC123(any)になっていることがあります。見出しのアイコンを確認し、必要ならテキスト型に変えてください。

方法2: M言語の if then else で書く

and/orを組み合わせた条件や、nullを先に除く条件は、「カスタム列」に式を書いたほうが確実です。

  1. 「列の追加」タブ→「カスタム列」を開く
  2. 「新しい列名」に列名を入力する
  3. 「カスタム列の式」の = の後に、式を入力する
if [売上金額] >= 100000 then "A"
else if [売上金額] >= 50000 then "B"
else "C"

式の先頭に each を書く必要はありません。カスタム列の画面が自動で付けます。

書くときの決まりごと

決まり 正しい例 よくある誤り
キーワードはすべて小文字 if then else If Then
else は省略できない if ... then "A" else null if ... then "A" で終える
等しいは =、等しくないは <> [地域] = "東京" == !=
文字列はダブルクォーテーションで囲む "東京" '東京'
列は角かっこで参照する [売上金額] 売上金額
記号を含む列名は #"" で囲む [#"金額(税込)"] [金額(税込)]

出力の型もそろえておきます。ある条件では "A"(テキスト)を、別の条件では 0(数値)を返すと、列の型を1つに決められません。

複数の条件を組み合わせる: and・or・not

if [地域] = "東京" and [売上金額] >= 100000 then "重点"
else if ([地域] = "大阪" or [地域] = "京都") and [売上金額] >= 50000 then "関西重点"
else "通常"
  • and: 両方の条件が成り立つとき
  • or: どちらかの条件が成り立つとき
  • not: 条件を反転する(例: not Text.Contains([商品名], "サンプル"))

and は or より先に評価されます。意図どおりに判定させるため、or を含む条件はかっこで囲んでおきます。

よく使う条件の書き方

やりたいこと 書き方
候補のどれかに一致する List.Contains({"大阪", "京都", "兵庫"}, [地域])
文字を含む Text.Contains([商品名], "トナー")
指定した文字で始まる Text.StartsWith([商品名], "業務用")
大文字・小文字を区別せずに含む Text.Contains([商品名], "abc", Comparer.OrdinalIgnoreCase)
日付で分ける [受注日] >= #date(2026, 4, 1)

Power Queryのテキスト比較は、大文字と小文字を区別します。"ABC" = "abc" は一致しません。前後の空白も別の文字として扱われるため、空白が混ざっている可能性がある列では、Text.Trim([地域]) = "東京" のように空白を除いてから比較します。

日付の比較では、列の型と比べる値の型をそろえます。列が日付/時刻型なのに #date(...) と比べるとエラーになることがあります。その場合は、列を日付型に変えるか、DateTime.Date([受注日]) で日付の部分だけを取り出してから比べます。

nullでエラーになるときの対処

例の表のように 売上金額 が空(null)の行があると、ランクの列にエラーが出ることがあります。エラーのセルを選ぶと、「値 null を型 Logical に変換できません」のようなメッセージが表示されます。

原因

M言語では、>= や < などの大小比較の片方がnullだと、比較の結果もnullになります。if の後ろには true か false が必要なため、nullが来るとエラーになります。

一方、= と <> の比較では、片方がnullでもエラーにならず、true か false が返ります。[地域] = "東京" の 地域 がnullでも、エラーにはならず、静かに else へ進みます。エラーが出ないぶん、見落としやすい点です。

対処1: nullの判定を最初に置く

if [売上金額] = null then "未入力"
else if [売上金額] >= 100000 then "A"
else if [売上金額] >= 50000 then "B"
else "C"

条件は上から順に判定されるため、nullの行は1行目で 未入力 になり、その下の大小比較までは進みません。

and と or も、左側の条件だけで結果が決まる場合は、右側を評価しません。そのため、次のように書いてもエラーを避けられます。

if [売上金額] <> null and [売上金額] >= 100000 then "A" else "その他"

条件列の画面で値に null と入力した場合は、数式バーで = null になっているか、= "null"("null"という文字列)になっているかを確認してください。文字列になっていると、nullの行には一致しません。

対処2: nullを別の値に置き換えてから比べる

if ([売上金額] ?? 0) >= 100000 then "A" else "その他"

?? は、左側がnullのときに右側の値を使う演算子です。ただし、この書き方では未入力の行が0円として扱われ、C などに分類されます。未入力を区別したいのか、0として扱ってよいのかを決めてから使ってください。?? が使えない環境では、対処1の書き方にします。

空文字とnullは別物

CSVから取り込んだテキストの列では、空欄が null ではなく空文字("")として入っていることがあります。両方を空欄として扱いたい場合は、[地域] = null or [地域] = "" のように両方を判定します。

型の違いでエラーになる・一致しないとき

エラーになる場合

売上金額 がテキスト型のまま [売上金額] >= 100000 と書くと、「演算子 >= を型 Text および Number に適用できません」のようなエラーになります。テキストと数値は大小を比べられないためです。

エラーにならず、一致しない場合

こちらのほうが厄介です。[商品コード] = 1 と書いたとき、商品コードがテキスト型で "1" が入っていると、エラーにはならず、結果は常に false になります。すべての行が else の値になるので、一見すると正しく動いているように見えます。

対処

  • 条件列のステップより前に、「データ型の変更」のステップで列の型を設定する
  • 型を変えられない事情がある場合は、式の中で変換する(Number.From([売上金額]) >= 100000 や [商品コード] = "1" など)
  • 型の変更で数値にできない値(- や 未定 など)が混ざっていると、その行は型変換の時点でエラーになります。条件列を作る前に、変換エラーの行を確認しておきます

作った列が正しいか確かめる

作った列は、次の方法で確認します。

  1. 値ごとの件数を数える: 「変換」タブ→「グループ化」で、ランク ごとに行数を数える。どれか1つの値に全行が集まっていたら、型やnullの扱いを疑う
  2. 境界の値を見る: 100000(ちょうど)、99999、50000、null、マイナスの値などの行が、想定どおりに分類されているか確認する
  3. 列のプロファイルで確認する: 「表示」タブの「列の分布」「列のプロファイル」を使うと、値の種類や件数を確認できます。初期設定では先頭1000行だけが対象なので、全体を見たいときは画面下部の表示を切り替えて、データセット全体を対象にする
  4. 型を確定する: ランク の列の型をテキストに設定する

列の型は、式の最後に指定することもできます。

= Table.AddColumn(
    #"変更された型",
    "ランク",
    each if [売上金額] = null then "未入力"
         else if [売上金額] >= 100000 then "A"
         else if [売上金額] >= 50000 then "B"
         else "C",
    type text
)

条件列の画面で作った式を、このように手で書き換えると、歯車アイコンから条件列の画面で開けなくなることがあります。その後は、数式バーか詳細エディターで修正します。

おすすめの記事