今回は「条件列」というコマンドの使い方を紹介していこう。このコマンドは、条件に応じて値が変化する“新しい列”を作成してくれる機能となる。言葉だけで説明しても理解しにくいと思うので、実例を見ながら使い方を学んでいこう。このコマンドを使って“区分用のデータ”を作成できるケースもあるので、ぜひ覚えておくとよい。

「条件列」とは?

「Power Query エディター」には「条件列」と呼ばれるコマンドも用意されている。今回は、このコマンドを使って“区分用のデータ”を作成する方法を紹介していこう。まだ使い方を知らない方は、この機会に一読しておくとよい。

  • 「条件列」の使い方、区分用データの作成

「条件列」を使った区分用データの作成

それでは、さっそく「条件列」の使い方を紹介していこう。以下の図は、あるハンバーガー店の売上記録を「4月の売上」フォルダーから取得したものだ。これまでに本連載で何回か紹介してきた例と同じデータ表である。

このデータ表には、売上データを「店内飲食」と「テイクアウト」に区分するための列が用意されている。このため、「店内飲食」または「テイクアウト」に限定してデータを集計することも可能だ。では、「フード」と「ドリンク」に分けてデータを集計したい場合はどうだろうか?

  • 「4月の売上」フォルダーから取得したデータ

このような場合は、各データを「フード」または「ドリンク」に区分する列を用意しておくと、以降の処理が楽になる。より具体的に書くと、「分類」の値に応じて、以下のように変化するデータを作成しておけばよい。

◆「分類」の値に応じたデータ作成
 ・「バーガー類」の場合 …………… フード
 ・「サイドメニュー」の場合 ……… フード
 ・「ソフトドリンク」の場合 ……… ドリンク
 ・「アルコール」の場合 …………… ドリンク

上記のデータを「条件列」で作成してみよう。「列の追加」タブを選択し、「条件列」をクリックする。

  • 「条件列」の作成開始

以下の図のような設定画面が表示されるので、新たに作成する列の「列名」を指定する。今回はフード(F)とドリンク(D)に区分する列を作成したいので、「F/D」という列名を指定した。

  • 新しく追加する列の「列名」の指定

続いて、“条件”を指定していく。今回の例の場合、フード/ドリンクの区分は「分類」の列で判断できる。よって、条件の対象にする列に「分類」を選択する。

  • 条件の対象にする「列名」の選択

条件の対象にする列を指定すると、「演算子」の項目が選択できるようになる。ここでは、「~に等しい」とか、「~で始まる」、「~を含む」といった“条件の種類”を選択すればよい。続けて、「値」に“条件とする値”を指定する。たとえば、以下の図のように指定すると、「分類」の値が「ソフトドリンク」に等しい場合は……、という条件になる。

  • 「演算子」の選択と「値」の指定

最後に、条件に合致するときに「出力」する値を指定する。今回の例の場合、「ソフトドリンク」は「ドリンク」の区分になるので、「ドリンク」と入力する。

  • 「出力」するデータの指定

これで1番目の処理の設定は完了となる。続いて、「分類」の値が「アルコール」に等しい場合は「ドリンク」を出力、という処理を追加していこう。「句の追加」ボタンをクリックし、先ほど同様の手順で“条件”と“出力値”を指定する。

  • 2番目の処理を指定

さらに、

・「分類」の値が「バーガー類」に等しい場合は「フード」を出力
・「分類」の値が「サイドメニュー」に等しい場合は「フード」を出力

といった処理を追加していくと設定完了になるが、これらの処理は「それ以外の場合」として一括処理することも可能だ。よって、「それ以外の場合」に「フード」と入力して「OK」ボタンをクリックする。

  • 「それ以外の場合」の指定

データ表の右端に列が追加され、指定した処理(条件分岐)に従って「ドリンク」または「フード」のデータが出力される。

  • 「条件列」により追加された列

あとは、この列を適当な位置へ移動し、データ型を「テキスト」に変更するだけ。これでフード/ドリンクを区分する列を作成できる。

  • 列を移動してデータ表を出力

「閉じて読み込む」をクリックして、データ表をExcelに出力した例も紹介しておこう。

  • Excelに出力されたテーブル

以降の作業は、目的に応じてデータを処理していくだけだ。たとえば、「フード」のデータだけを閲覧したいときは、フィルター機能を使って「フード」の項目だけをONにすればよい。

  • フィルター機能により「フード」だけを表示した場合

また、「数量」や「売上」を関数SUBTOTALで集計しておけば、表示されているデータについてのみ合計などを求めることも可能となる。そのほか、関数SUMIFで「フード」または「ドリンク」に限定した合計を算出するなど、使い方は各自の自由である。

Excelに慣れている方なら、「フード」または「ドリンク」を区分するデータが存在することの重要性を容易に理解できるだろう。

「数値」や「日付」を条件にする場合

先ほどの例では、データ型が「テキスト」の列を条件にデータを作成した。もちろん、データ型が「整数」や「10進数」、「日付」などの列を対象に「条件列」を使用することも可能だ。この場合は、「~より小さい」や「~以上」、「~より前」、「~以降」など、条件を“範囲”で指定することも可能となる。

今度は「生年月日」に応じて会員を3種類に区分する例を紹介していこう。

  • 各会員の生年月日

ここでは、65歳以上を「シルバー会員」、25歳以上を「通常会員」、25歳未満を「ヤング会員」と区分する場合を例に操作手順を紹介していこう。「列の追加」タブを選択し、「条件列」をクリックする。

  • 「条件列」の作成開始

新たに作成する列の「列名」を入力する。続いて、65歳以上を「シルバー会員」に区分する処理を指定していく。ここでは、作業日の日付が2024年11月1日として話を進めていこう。この場合、1959年11月1日以前に生まれた方が65歳以上になる。この条件を以下の図のように指定する。

  • 「演算子」の選択と「値」の指定

続いて、条件に合致するときの出力値を指定する。今回の例の場合、「シルバー会員」と入力すればよい。

  • 「出力」するデータの指定

同様の手順で、25歳以上を「通常会員」に区分する処理を指定する。作業日が2024年11月1日の場合、25歳以上になるのは1999年11月1日以前に生まれた方となる。これを条件に指定し、出力値に「通常会員」と入力する。最後に、「それ以外の場合」(25歳未満の場合)に「ヤング会員」と入力すると、条件分岐処理の設定が完了する。

  • 「2番目の処理」と「それ以外の場合」を指定

「OK」ボタンをクリックして「条件列」を実行し、作成された列を「生年月日」の隣へ移動すると、以下の図のような結果を得ることができる。「生年月日」に応じて「会員種別」を3種類に区分できていることを確認できるだろう。

  • 「条件列」により追加された列

このように、“数値データ”や“日付データ”を条件にして区分用のデータを作成することも可能である。

ただし、上記に示した例は、実務で使うには「適切とは言えない処理方法」となることに注意しなければならない。というのも、この例は“2024年11月1日に作業した場合”という限定的な処理になってしまうからだ。

その後、1週間が経過して2024年11月8日になれば、1959/11/8以前に生まれた方は65歳以上になる。同様に、1999/11/8以前に生まれた方は25歳以上になる。よって、作業を行う日に応じて「条件列」の設定を変更しなければならないことになる。これでは自動処理として使えない。

正しく処理するには、「生年月日」のデータから現時点における「年齢」を自動算出し、その「年齢」をもとにデータを区分しなければならない。そのためには、日付データを計算する方法を学んでおく必要がある。これについては、いずれ本連載で詳しく紹介していく予定だ。先ほどの例は、あくまで「条件列」の使い方だけを説明した例、と捉えて頂ければ幸いだ。

そのほか、「数値」や「日付」の範囲で条件分岐させるときは、各処理の並び順にも注意しておく必要がある。たとえば、先ほどの処理を逆の順番で指定すると、2番目の処理が機能しなくなり、65歳以上の方も「通常会員」として処理されてしまう。

  • 条件を指定する順番を逆にした場合

  • 「条件列」により追加された列(不具合あり)

これは「上に表示されている処理ほど優先順位が高い」というルールになっていることが原因だ。65歳以上(1959/11/1以前)は25歳以上(1999/11/1以前)にも該当するため、1番目の処理の時点で「通常会員」のデータが出力され、2番目の処理は実行されなくなってしまう。

このように、複数の処理(条件)を指定するときは、その並び順にも注意しておく必要がある。もしも順番を間違えてしまった場合は、各処理の右端にある「…」をクリックすると、並び順を変更できるようになる。

  • 条件の並び順を変更する操作

「条件列」が思い通りに機能しない場合の対処法として、このようなルールが存在することも覚えておく必要があるだろう。