今回は「条件列」の出力値に「数式」を指定する方法を紹介していこう。このテクニックを使えば、条件に応じて計算方法を変化させることが可能となる。前回の連載で紹介した「和暦」を「西暦」に換算する場合を例に、その具体的な使い方を説明していこう。また、数式を指定した「条件列」を修正するときの注意点についても補足しておく。
「条件列」の出力値に数式を記述
「条件列」の出力値には「特定の値」や「列」を指定するのが基本的な使い方となる(詳しくは第26回と第27回の連載を参照)。とはいえ、せっかく数式の使い方を覚えたのだから、「条件に応じて計算方法を変化させたい」という場合もあるだろう。そこで今回は、「条件列」の出力値に「数式」を指定する方法を紹介していこう。
今回も、前回と同じデータ表を使って操作手順を解説していこう。以下の図は、ある会社の社員データを記録したデータ表だ。ただし、「入社年度」の表記が統一されていないため、非常に扱いにくいものになっている。
これらのデータを「西暦」に換算する場合を例に、具体的な使い方を解説していこう。まずは、年の部分だけを数値データとして切り分ける。この処理手順は、前回の連載で解説した通りだ。よく分からない方は、前回の連載を先に一読しておくとよいだろう。
続いて、「年」に以下の数値を加算して「西暦」に換算する。
・「昭和」の場合 ………… 1925を加算する
・「平成」の場合 ………… 1988を加算する
・「令和」の場合 ………… 2018を加算する
この計算を行うために、前回の連載では「加算値」という列を作成した。今回は、いちいち「加算値」の列を作成するのではなく、「条件列」で一気に計算まで済ませてしまおう。「列の追加」タブにある「条件列」をクリックする。
「条件列」の設定画面が表示されるので、新しく作成する列の「列名」を入力する。今回の例では、「入社年度(西暦)」という列名を指定した。
続いて、条件と出力値を指定していく。まずは、「元号」に「S」の文字が含まれている場合の処理だ。この場合は「昭和」に該当するので、「年」の値に1925を加算してあげればよい。これを数式で示すと「 =[年]+1925 」となる。なお、出力値に数式を指定するときは、最初に「=」(イコール)の記述が必要となる。忘れないように注意すること。
次は、「元号」に「昭」の文字が含まれている場合の処理だ。条件が異なるだけで、こちらも数式の記述は同じになる。
同様の手順で「平成」や「令和」の場合の処理を追加していく。元号が「平成」の場合は「年」に1988を加算、「令和」の場合は「年」に2018を加算、という処理を行うように数式を指定していけばよい。
最後に、どの条件にも該当しない場合の出力値を「それ以外の場合」に指定する。この場合は「もともと西暦で数値が記録されていた」と考えられるので、「年」の列をそのまま出力すればよい。
「OK」ボタンをクリックすると、それぞれの条件に応じた計算が行われ、その計算結果がデータ表の右端に追加される。この列を「年」の右隣へ移動すると、以下の図のようになる。
これで、それぞれの「入社年度」を西暦に換算することができた。念のため、データ型を「整数」に変更しておこう。
あとは不要になった列を削除するだけ。これで前回の連載と同じ処理結果を得ることができる。
このように「条件列」の出力値に数式を指定することも可能となっている。数式の記述方法は「カスタム列」に数式を記述する場合と同じ。先頭に「=」(イコール)を記述し、列名を半角の[ ]で囲んで記述すればよい。「カスタム列」を使った計算を理解している方なら、問題なく数式を指定できるだろう。
数式を記述した「条件列」の修正
続いては、「条件列」の処理内容を修正する場合について補足しておこう。たとえば、先ほど指定した「条件列」のステップにある「歯車」のアイコンをクリックして設定画面を呼び出すと……、
「条件列」を指定したときの設定画面ではなく、「カスタム列」の設定画面が表示される。このように、出力値に数式を指定した「条件列」は、それ以降「カスタム列」として扱われる仕組みになっている。このため、処理内容を修正するには、M言語について少しだけ学んでおく必要がある。
「ノーコードでパワークエリを使用する」というのが本連載の主旨であるが、条件分岐処理を行うif文くらいは、記述方法を覚えおいた方が何かと応用が効く。そこで、if文の構成について補足しておこう。
ifのすぐ後には「条件」を記述する。今回の例の場合、「元号の列に"S"の文字が含まれている場合」という条件になる。この条件は、Text.Contains([元号], "S") という記述により指定されている。
続いて、条件に合致する場合(真の場合)の処理をthenの後に記述する。今回の例の場合、「年の列に1925を加算する」という処理になる。この処理を数式で示すと、[年]+1925 になる。なお、if文の中に数式を記述する場合は、最初の「=」は不要となる。
続いて、条件に合致しない場合(偽の場合)の処理をelse以降に記述する。今回の例の場合、他の条件分岐について処理を進めていくので、2番目のif文、3番目のif文、……が次々と記述されていくことになる。
条件が多いと少し複雑になるので、もっとシンプルな例も紹介しておこう。今度は、「税抜金額」が1万円以上なら10%割引する、という処理を「条件列」で実現しみよう。
この場合、「条件列」の設定は以下の図のようになる。「税抜金額」が「10000」以上の場合は「税抜金額」に0.9を掛け算した数値を出力、そうでない場合は「税抜金額」の列をそのまま出力する、という処理になる。
実行結果は、以下の図のようになる。「歯車」のアイコンをクリックして、この処理の設定画面を再表示すると……、
以下の図のような設定画面が表示される。こちらの方がif文の構成を理解しやすいだろう。ifのすぐ後には、[税抜金額] >= 10000 という条件が記述されている。つまり、「税抜金額」の列が1万以上の場合、という条件になる。
続いて、条件に合致する場合(真の場合)の処理がthenの後に記述されている。こちらの記述は、[税抜金額]*0.9 となっている。つまり、「税抜金額」の列に0.9を掛け算する、という処理になる。
続いて、条件に合致しない場合(偽の場合)の処理がelseの後に記述されている。こちらの記述は、[税抜金額] のみ。つまり、「税抜金額」の列をそのまま出力する、という処理になる。
要するに、if文は以下のような構成(書式)になっている訳だ。
◆ifの書式
= if (条件) then (真の場合) else (偽の場合)
このことを覚えておけば、ちょっとした修正にも十分に対応できるだろう。たとえば、「税抜金額」が1万円以上なら15%割引する、という処理に変更したい場合は、(真の場合)に記述されている数式を [税抜金額]*0.85 に修正すればよい。
ExcelのIF関数のようにカッコ内に引数を記述するのではなく、プログラム的な記述になっているが、Excelに慣れている方なら十分に対応できるだろう。
最後に、もうひとつ補足を追加しておこう。前回と今回の連載で紹介した「和暦」を「西暦」に換算する処理は、元号のアルファベット(S/H/R)が「半角」で記述されていた場合にのみ正しく機能する。同様に、年を示す数字も「半角」で記述されている必要がある。
これらが「全角」で記述されているデータが混じっていた場合は、あらかじめASC関数ですべての「全角」を「半角」に変換してからパワークエリの処理を進めていく必要がある。パワークエリには「全角を半角を変換する機能」が用意されていないため、ExcelのASC関数を使った方が簡単である。このように、それぞれの得意分野についても理解しておくと、より一層、Excelを自由自在に活用できるようになるはずだ。