エクセルでよく使うIF関数ですが、パワークエリにおいてもIF文法の理解を深めることでより効率化できる幅が広がります
この記事では、IF関数の使い方やIF文を書く時のルールなどを解説します
条件列を作成する
いちからIF文を作成するのは初心者には難しいので、一旦、条件列の作成を行ってから修正をおこないます
サンプルで次のテーブルを使用します

条件列の追加を行います

IF文を使ったステップが作成されました

ここで「追加された条件列」ステップの式を覗いてみると
if ・・・・・・・ then ・・・・・
else if・・・・・ then・・・・・
else if ・・・・・then・・・・・
else ・・・・・
という形が見えてくるかと思います
これを訳すと
もし ○○が×× ならば △△ してください
次に、もし ○○が×× ならば △△ してください
次に、もし ○○が×× ならば △△ してください
それ以外であれば △△してください
という意味になります
ちなみに、条件として使用する関数には、次の種類があります
指定の値に等しい | [列名] = “a” then “b” |
指定の値に等しくない | [列名] <> “a” then “b” |
指定の値より小さい | [列名] < a then b |
指定の値以下 | [列名] <= a then b |
指定の値より大きい | [列名] > a then b |
指定の値以上 | [列名] >= a then b |
指定の値で始まる | Text.StartsWith ( [列名] ,“a”) then “b” |
次の値で始まらない | notText.StartsWith ( [列名] ,“a”) then “b” |
指定の値で終わる | notText.EndsWith ( [列名] , “a” ) then “b” |
次の値で終わらない | notText.EndsWith ( [列名] , “a”) then “b” |
指定の値を含む | Text.Contains ( [列名] , “a” ) then “b” |
指定の値を含まない | notText.Contains ( [列名] , “a” ) then “b” |
指定の値がリストの中のデータに含まれる | List.Contains ( リストa , [列名] ) then “b” |
イコール(=)を使った簡単な例を紹介します
if [商品名] = "商品A" then "a商品"
else if [商品名] = "商品B" then "b商品"
else "c商品"
【訳】
もし [商品名]列 が "商品A" ならば 値を"a商品"に してください
次に、もし [商品名]列 が "商品B" ならば 値を"b商品"に してください
それ以外であれば 値を"c商品"に してください
AND条件やOR条件と組み合わせる
単純な条件であれば、条件列の作成で事足りますが、AND条件やOR条件などを組み合わせる場合は、自分で考えて式を書き換えなければなりません
and | かつ | [列名1] = “a” and [列名2] >= b then “c” |
or | または | [列名1] = “a” or [列名2] >= b then “c” |
サンプルで例を作成すると次のようになります
if [商品名] = "商品A" and [数量] >= 5 then "a が5個以上 売れた"
if [商品名] = "商品A" or [商品名] = "商品B" then "a か b が5個以上 売れた"
さらに複数条件を組み合わせる場合、()括りが必要になります。
例えば次のような条件の場合です、
条件:「商品Aかつ、5個以上売れた」または、「商品Bかつ、3個以上売れた」場合
まず、and条件の範囲を () でくくり、それらを or条件 で繋げます
if ([商品名] = "商品A" and [数量] >= 5) or ([商品名] = "商品A" and [数量] >= 3) then
NOT条件
~~でない、と条件にしたい場合は、NOTを使います
andやorの後ろに使うことで、「〇〇且つ、〇〇でない」という意味になります
if [商品名] = "商品A" and not [数量] >= 3 then
「商品名が商品A」かつ、「数量が3以上」でない ならば
if [商品名] = "商品A" or not [数量] >= 3 then
「商品名が商品A」または、「数量が3以上」でない ならば
また、特定の箇所に NOT を効かせたい場合は、 () でくくります
if [商品名] = "商品A" or not ( [数量] >= 3 ) then
「商品名が商品A」かつ、「数量が3以上でない」ならば
if [商品名] = "商品A" or not ( [数量] >= 3 ) then
「商品名が商品A」または、「数量が3以上でない」ならば
また、使用する機会はほとんどないですが、
List.Contains関数にも NOTを使うことで、「指定のリストに含まれない」という条件ができます
not List.Contains ( リストa , [列名] ) then
Text.Contains関数(○○を含む)の対象となる列にnullがある場合、エラーが発生することがあります。
これはnullが「値がない」ことを意味して、適切に処理ができないためです
そのためエラーを防ぐには、あらかじめ列のnull値を「””(空文字)」で置換するなどの対応が必要です。
Udemy(ユーデミー)は、世界中の講師と学習者をオンラインで結びつける学習プラットフォームです。
Udemyの特徴は「買い切り型の動画」で、購入後いつでも無制限に視聴可能なことです。
また、セール時には本1冊分ほどの価格で購入できる講座もあります。
独学で得られない理論やテクニックなどを、サンプルデータ付きでわかりやすく学ぶことができるため、コストパフォーマンスは抜群です!
いつでもどこでも何度でも、スマホが教室に Udemy
コメント