Pages

Tuesday, June 21, 2022

エクセル上手は1対1の条件で表示を切り替えるならIF/IFS関数より「SWITCH関数」を使う! - 窓の杜

「SWITCH関数」はいつ使えばいい?

 以前の記事でIF関数とIFS関数の書き換えについて紹介しましたが、条件判定に使えるもうひとつの関数「SWITCH」(スイッチ)をご存じですか? 指定した値と一致するかどうかを調べて、対応する値を表示できる関数です。CHOOSE関数の後継として、Excel 2016から使えるようになりました。Microsoft 365のExcelでも利用可能です。お使いのExcelで「SWITCH関数」が使えるかどうかは数式バーに「=sw」と入力することで確認できます。

数式バーに「=sw」と入力して「SWITCH」と表示されれば利用可能

「IFS関数」より「SWITCH関数」の方がすっきり記述できるシーン

 条件を判定するならIF/IFS関数でいいのではないか、と思われるのももっともですが、便利に使えるシーンもあるのです。以下の例を見てください。会員ランクに応じて割引率を取り出すために「IFS関数」を利用しています。

IFS関数を利用した数式「=IFS(D2=G2,H2,D2=G3,H3,D2=G4,H4,TRUE,0)」の例。数式をコピーする前提なら絶対参照で「=IFS(D2=$G$2,$H$2,D2=$G$3,$H$3,D2=$G$4,$H$4,TRUE,0)」となる

 「D2=G2」「D2=G3」「D2=G4」と、文字列を比較する条件が並んでいます。スマートではありませんし、項目数が増えれば同じような条件式を何度も記述する手間が増えます。SWITCH関数で書き換えると以下のようになります。

SWITCH関数を利用した数式「=SWITCH(D2,G2,H2,G3,H3,G4,H4,0)」の例。数式をコピーする前提なら絶対参照で「=SWITCH(D2,$G$2,$H$2,$G$3,$H$3,$G$4,$H$4,0)」となる

 SWITCH関数の構文は以下の通りです。ひとつめの引数[式]には参照する値、もしくはセルを指定します。2つめの引数[値]と3つめの引数[結果]をセットで考えて、[式]と[値1]が一致した場合に[結果1]、[値2]が一致した場合に[結果2]を表示します。最後の引数[既定の結果]は、どの[値]にも一致しなかった場合に表示する結果です。

SWITCH関数の構文。「式」と「値1」が一致すれば「結果1」、「値2」と一致すれば「結果2」……、と指定する。最後の引数[既定の結果]は、どの[値]にも一致しなかった場合に表示する結果を指定する

 先ほどのSWITCH関数の数式は「=SWITCH(D2,G2,H2,G3,H3,G4,H4,0)」でした。「セルD2がセルG2と一致すればセルH2」「セルD2がセルG3と一致すればセルH3」「セルD2がセルG4と一致すればセルH4」、それ以外は「0」を表示するという意味になります。IFS関数よりもSWITCH関数のほうが簡潔です。

 なお、SWITCH関数の仕様は「値」と「結果」のセットを126個まで指定可能ですが、5つくらいまでが現実的でしょう。項目数の多いリストから値を取得したい場合は、VLOOKUP関数かXLOOKUP関数を使うべきです。1対1の条件で文字列を切り替えたい(スイッチしたい)時が、SWITCH関数の使いどころと言えます。関数名通りですね。

SWITCH関数を入力する

 先ほど紹介した数式の入力方法を紹介します。引数の指定方法はほかの関数と同じです。「=sw」と入力して「SWITCH」を反転させて[Tab]キーを押す。その後、引数となるセルを選択して、半角の「,」(カンマ)で区切りながらセルを選択していきます。

 ここでは「値」と「結果」を入力した別表を用意していますが、直接入力で「=SWITCH(D2,"ゴールド会員",0.05,"シルバー会員",0.02,"一般会員",0.01,0)」と指定しても構いません。

旧バージョンのExcelへの対応

 SWITCH関数を含むファイルを旧バージョンのExcelで開く可能性がある場合は、互換性を考慮して数式を修正する必要があります。CHOOSE関数かVLOOKUP関数のいずれかを利用することになりますが、これからCHOOSE関数積極的に覚えて利用するメリットはないでしょう。ちなみに構文は以下の通りです。

CHOOSE関数の構文。「インデックス」が「1」の場合は「値1」、「2」の場合は「値2」のように、「インデックス」に対応する「値」が表示される

 SWITCH関数の引数[式]に相当する引数[インデックス]は「1」「2」…、のように数値で指定する必要があります。この課題を解決するためにMATCH関数を組み合わせるケースが多いです。先ほどの例をCHOOSE関数で書き換えると「=CHOOSE(MATCH(D2,G2:G4,0),H2,H3,H4)」となります。

MATCH関数でセルD2の値をセルG2~G4から完全一致「0」で探して、結果は「1」となる。CHOOSE関数の引数[インデックス]に「1」が指定されたことになる。数式をコピーする前提なら絶対参照で「=CHOOSE(MATCH(D2,$G$2:$G$4,0),$H$2,$H$3,$H$4)」となる
CHOOSE関数の結果としてセルH2の値(2%)が表示される

 MATCH関数は指定した値(セルD2)をセル範囲(G2:G4)から探します。最後の引数に指定した「0」は完全一致の意味。つまり、セル範囲G2~G4からセルD2を完全一致で探します。上記の例では、MATCH関数の結果は「1」、CHOOSE関数の引数[インデックス]=「1」と指定したことになり、結果はセルH2(2%)が表示されます。

 ややこしいですよね。旧バージョンの互換性を考慮してSWITCH関数を修正するなら、定番のVLOOKUP関数がおすすめです。

セルE2に入力したSWITCH関数を削除して「=VLOOKUP(D2,G2:I4,2,FALSE)」と書き換える。セル範囲G2~G4からセルD2の値を完全一致(FALSE)で探して、2列目(2)の値を取り出す。数式をコピーする前提なら絶対参照で「=VLOOKUP(D2,$G$2:$I$4,2,FALSE)」となる
SWITCH関数と同じ結果が得られる

SWITCH関数の活用例

 最後にSWITCH関数の活用例を見てみましょう。以下のようなケースでは、ほかの関数を使うよりSWITCH関数に分があります。

上位3位にフラグを立てる

 得点や回数などの数値を判断して上位3位にフラグを立てることを考えます。ここでは、来店回数が多い順に3名に特典を付与することを考えます。セル範囲におけるランキングを取得するRANK.EQ関数の結果は「1」「2」「3」…、と数値で返えされるので、その結果をSWITCH関数で判定します。

 ここでは、1、2、3位すべてに「○」を表示させましたが、「優勝」「準優勝」「第3位」などの文字列を表示させることも可能です。

「=SWITCH(RANK.EQ(C2,$C$2:$C$11),1,"○",2,"○",3,"○","")」の数式をセルF2~F11までコピーしてある。1、2、3位すべてに「○」が表示されている

文字列から区分を判定する

 製品コードの1文字目をチェックして区分を判定します。ここでは、LEFT関数を利用していますが、RIGHT関数で末尾の文字、さらにMID関数やLEN関数を組み合わせてハイフン後ろの文字を判定などの応用も可能です。

「=SWITCH(LEFT(A2,1),"G","限定","S","スペシャル","")」の数式をセルC2~C11までコピーしてある。製品コードの1文字目が「G」なら「限定」、「S」なら「スペシャル」、それ以外は何も表示しない。同様の処理をIF/IFS関数で行なうと数式が冗長になってしまう

Adblock test (Why?)


からの記事と詳細 ( エクセル上手は1対1の条件で表示を切り替えるならIF/IFS関数より「SWITCH関数」を使う! - 窓の杜 )
https://forest.watch.impress.co.jp/docs/serial/offitech/1418693.html

No comments:

Post a Comment