SWITCH関数・CHOOSE関数☆
あるセルの値によって表示する値を変えるには、VLOOKUP関数でほかの表から対応する値を求める方法、IFS関数である値と比較してその条件に一致していたものを求める方法がありますが、VLOOKUP関数は別の表が必要ですし、IFS関数はいくつも論理式を書く必要があります。
SWITCH関数は別の表が不要でIFS関数よりも簡単に計算式を作成できます。CHOOSE関数についてはもっと簡単にできます。
ケースによってどの関数が良いか変わってきますが、簡単な条件ならSWITCH関数やCHOOSE関数でも使えるかもしれませんね。
SWITCH関数
SWITCH関数は、指定したセルの値によって、どんな値を出すか設定できる関数です。
=SWITCH(式,値1,結果1,…,[既定])
式は何の値をテストするかです。セルを指定するケースが多いでしょう。
値はその値が式のものと一致しているかを見るもので、一致していれば結果を答えとします。数字の場合と文字の場合、セルの場合があるでしょう。
値と結果は交互に入力していきますが、どれにも当てはまらなった場合に出したい値を既定の値として最後の結果の後に設定することで、どれにも当てはまらなかった場合にその値にすることができます。もし最後が結果で終わっている式の時は規定値はないということで、どれにも当てはまらなかったということになります。その場合#N/Aというエラーが求まります。
次はカレンダーの例です。WEEDAY関数は日付から曜日に対応する数字を取り出す関数で、A列の日付に対する曜日の数字をB列に求めています。WEEKDAY関数で求まる数字は既定では日曜が1で土曜が7です。その曜日の数字をもとに、土日には「休日」、ほかの場合は「平日」とC列に表示したいのです。その場合のセルC2に入る計算式は次の通りです。
=SWITCH(B2,1,"休日",7,"休日","平日")
セルB2の値を見て、1ならば「休日」、2のときも「休日」、1でも2でもなかったら「平日」という式です。
今度は商品によって入荷日数が変わるものの、入荷日を求める計算書です。
「コンクリート」なら1日、「木」なら3日、「鉄」なら5日、「超合金」なら10日かかります。その日数を今日の日付に足せば入荷日が求まるようになっています。
このときの、セルC3の注文商品材料に対する入荷日数を、セルC2に求める計算式は次の通りです。
=SWITCH(C3,"コンクリート",1,"木",3,"鉄",5,"超合金",10)
この場合は、検索するのが文字になるのでそれぞれの値は””で囲んでいます。
最後は「10」でこれは超合金に対する結果ですので、最後は結果で終わっているといえます。既定値は指定されていないので、セルB3が未入力時やこれ以外の注文商品材料を入力したときは、最後まで見つからないので#N/Aを求めます。
次のケースは、毎度おなじみの商品一覧から商品名を検索して単価を求めています。この場合、普通はVLOOKUP関数を使いますが、今回はSWITCH関数で作ってみました。
B列の販売商品を見て、E列に入力されている値に一致しているか見て、一致している結果をF列から求めているのですね。プラスチックは右の表にないので、それ以外のものが指定されていたら空白が既定値で表示されるように設定しています。
=SWITCH(B2,$E$2,$F$2,$E$3,$F$3,$E$4,$F$4,$E$5,$F$5,"")
でも計算式がわかりにくくなるし、1セルごとに指定しているので間違えそうです。このようなケースはVLOOKUP関数のほうがいいでしょう。
なぜか次の表のようにおかしな表でこの表を整備してもいけない場合はSWITCH関数が使えそうです。検索対象範囲が1列になっていないのでVLOOKUP関数やXLOOKUP関数では無理です。
CHOOSE関数
CHOOSE関数は、1から始まる番号によって出すものを変える関数です。1から始まる番号ということがルールで決まっているので、SWITCH関数でいう、どんな値だったらという値の指定はありません。番号と順番に何を出すかだけです。基本的に1から始まるものを指定します。
=CHOOSE(インデックス,値1,値2,…)
インデックスは1から入る番号が入力されているセルで、値はそれに対応するものを順番に指定していきます。値には数値、文字列、セルを指定できます。
次はA列の月の数字から、B列に旧暦の月の呼び名を求めるシートです。セルB2に入る計算式は次の通りです。
=CHOOSE(A2,"睦月","如月","弥生","卯月","皐月","水無月","文月","葉月","長月","神無月","霜月","師走")
セルA2をインデックスにして、1月から12月までの旧暦の呼び名を12個、順番に指定している数式です。
セルA2が1番目なので、値の一番目である睦月が求められています。
このように、番号に対して決まりきっているような値を指定するときに力を発揮しそうですね。
ちなみにインデックスは整数である必要はないですが、小数点以下は切り捨てて処理されます。
インデックスに1未満の数字、小数点以下を切り捨てたときに指定した値の数より大きくなる数、文字列を指定すると#VALUE!エラーになるので注意してください。
まとめ
日付から年を取り出す変換はYEAR関数のようにその変換専用の関数や、日付から曜日を出すことが簡単にできるTEXT関数の使い方など、複数の値の中から見つけなくても変換できる方法もあるので、それができる場合はその方法を使いましょう。
変換する法則を数式で考えてできるものは、関数ではなく計算式で行うこともあります。
(その人の身長から理想体重BMIを計算するなど)
そういったものでも変換できない、法則のないものに対しての変換を行う方法が、今回紹介した関数や、VLOOKUP関数などの検索行列関数、IFS関数です。
このような中でどの関数なら考えやすいかって一つの基準になるのは次のようなことだと思います。
- 整理された別表を見て値を変換する:VLOOKUP関数、XLOOKUP関数
- 整理された別表はなく参照するセルが1つではなく複数:IFS関数
- 整理された別表はなく参照するセルが1つ:SWITCH関数
- 整理された別表はなく参照するセルが1つで2つに1つの場合:IF関数
- 整理された別表はなく参照するセルが1つ、ただし探す条件に不等号が必要な場合:IFS関数
- 1から始まる順番に当てはめられるもの:CHOOSE関数
- 1から始まる順番に当てはめられる別表がある:INDEX関数
関連関数
VLOOKUP関数:ほかの一覧表で一致したものに対する指定した列のデータを求めます
XLOOKUP関数:ほかの一覧表で一致したものに対する指定した範囲のデータを求めます
IF関数:条件によって2つに分けます
IFS関数:条件によって複数に分けます
INDEX関数:何番目を指定して範囲の中からどれを出すか決めます