IFS 関数 / SWITCH 関数


ここで解説する IFS関数 と SWITCH関数 は、Microsoft 365からインストールするProPlusで使えます。あるいは、永続ライセンス版でしたら、Excel 2019以降で使用可能です。

本稿の内容や、使い方のサンプルなどは、下記の動画でも解説しています。

また、本稿の最後に、追記もしてありますので、ぜひご覧ください。

条件分岐の動作

まず、昔からある IF関数 の動きを確認しましょう。

○が1だったら、"田中"を表示します。そうでなかったら"×"を表示します。"田中"が表示されるのは、○が1のときだけです。"×"が表示されるのは、○が1ではないときです。2だろうが1024だろうが、"Excel"だろうが空欄だろうが何でも、とにかく1でなければ、すべて"×"です。これが IF関数 の動きです。このように「■なのか、そうでないのか」という値を「二値(にち)」と呼びます。最もよく使われる二値は"TRUE"と"FALSE"でしょう。"TRUE"とは「"FALSE"ではない値」と定義されています。今までのExcelには、このような「二値」を判定する IF関数 しかありませんでした。しかし実務は二値だけでは済みません。「1だったら」「そうでなかったら」だけではなく、「1だったら」「2だったら」「3だったら」…という分岐も必要です。そこで、しかたなく今までは

のように、書くしかありませんでした。これは、次のようなイメージです。

これでは、分岐の数が増えると可読性が低下します。実用的ではありません。VBAなどのプログラミング言語では、こんなとき Select Case などを使いますが、今までのExcelには、そうした動作を実現するワークシート関数がありませんでした。そこで、Excel 2016で追加されたのが、IFS関数 と SWITCH関数 です。両者は、次のような条件分岐が可能です。

IFS関数とSWITCH関数の違い(1)

IFS関数 と SWITCH関数 の書式は次のとおりです。

引数「結果」には、100(数値)や"OK"(文字列)などを指定して表示させるだけでなく、A3(セル参照)やSUM(A1:A5)(関数)など式を指定することもできます。

よく似た働きをする両者ですが、動作や書き方などに少し違いがあります。まずは、IFS関数 からいきましょう。IFS関数 の"判定"には、それが正しいかどうかの判定式を指定します。たとえば

  • A1=1 (セルA1の値が1である)
  • SUM(A1:A5)>100 (SUM関数の結果が100より大きい)
  • TEXT(NOW(),"ggg")="令和" (今日の日付の元号が"令和"である)

などのように。IFS関数 に指定する複数の"判定"は、それぞれ自由に書けますので、次のように複数の異なるセルを判定したり、複数の異なる式を判定することも可能です。

対して SWITCH関数 は、1つの"式(モノ)"しか判定できません

セルA1が1だったら、2だったら、3だったら】

LEFT関数の結果が"A"だったら、"B"だったら、"C"だったら】

IFS関数 と SWITCH関数 の大きな違いは、これです。判定の対象が異なる式(モノ)だったら、IFS関数 を使います。

IFS関数とSWITCH関数の違い(2)

IFS関数 と SWITCH関数 の違いは、もうひとつあります。IFS関数 は「以下」や「より大きい」のような比較をできますが、SWITCH関数 は「である」という"完全一致"でしか判定できません。

上図のように「である」という完全一致なら、どちらの関数でも正しく判定できます。

しかし、上図のような「より大きい」といった判定を、SWITCH関数 ではできません。

ちなみに、SWITCH関数 はワイルドカードを使えません。また、アルファベットの大文字と小文字は区別されません。

SWITCH関数 は「である」のように"等しい"判定しかできません。「ではない」のような"等しくない"は判定できません。

セルA2は"広瀬"です。これは"田中"ではありません。しかし結果は1になりません。つまり「ではない」の判定はできないということです。

IFS関数とSWITCH関数の違い(3)

両者は「どれでもなかったら」の指定方法も異なります。

IFS関数 は、「判定」と「結果」を1セットずつ指定します。左から順に調べていき、正しい(TRUEになる)「判定」の「結果」が返ります。もし、どの「判定」もTRUEにならなかったら、IFS関数はエラーになります。どの「判定」も正しくなかったときに「どれでもなかったら」の「結果」を返すには、最後に必ず正しい(TRUEになる)「判定」を指定します。それには「判定」のところに TRUE と記述します。

SWITCH関数 の「どれでもなかったら」は、IFS関数 と違い、ただ「値」を書くだけです。SWITCH関数 は「値」と「結果」で1セットです。このセットの一番最後で「値」を書かずに「結果」だけを記述すると、それが「どれでもなかったら」に該当します。

まとめ

以下は個人的な見解です。

IFS関数 の特徴は、複数の異なるセルや、複数の異なる式を評価できることです。しかし、実務でそういうことは、あまりやらないでしょう。まったくやらないわけではありませんけど、機会は少ないと思います。となれば、IFS関数 よりも SWITCH関数 の方が使う機会が多いでしょう。ただし、SWITCH関数 は「である」という完全一致の判定しかできません。それでは実務では不足です。もし「以上」や「より大きい」などを判定したいときには IFS関数 ですね。おそらく実務では、そういう使われ方がされるのではないかと思います。いずれにしても便利な関数が追加されました。ああ、ちなみに、IFS関数 も SWITCH関数 も、VBAのWorksheetFunctionからは呼び出せません。その必要もないですけどね。

追記

本稿を書いたり、動画を公開したあとで気づいたのですが、解説に誤りがあったので訂正します。

「IFS関数とSWITCH関数の違い」の(1)と(2)で、

  1. SWITCH関数は、1つの"式(モノ)"しか判定できません
  2. SWITCH関数は、「である」という"完全一致"でしか判定できません

と書きましたが、すみません!どちらも、できました。これ、後になって気づいたので、本稿や動画を作り直してもよかったのですが、ちょっと面倒くさいのと(笑)、今後は気をつけようという自戒の念を込めて、本稿や動画はそのまま残しておきます。

そもそも、このSWITCH関数って、VBAでいうところの「Select Case」です。Select Caseは、たとえば次のように使います。

Sub Macro1()
    Select Case Range("A1")
    Case "A"
        MsgBox "Aです"
    Case "B"
        MsgBox "Bです"
    Case Else
        MsgBox "Cです"
    End Select
End Sub

これは「セルA1の値が」"A"と等しいか、"B"と等しいのか、あるいは、どちらでもないのかを判定しています。やっていることは、SWITCH関数と似ていますよね。ただ、このSelect Caseに関しては、次のように書くことで「数値の大小比較」も可能です。

Sub Macro1()
    Select Case Range("A1")
    Case Is >= 50
        MsgBox "大きい"
    Case Is < 50
        MsgBox "小さい"
    End Select
End Sub

ここまでは、VBAのヘルプに記載された使い方なのですが、実は次のようにすることもできます。

Sub Macro1()
    Select Case True
    Case 任意の式1
        結果1
    Case 任意の式2
        結果2
    End Select
End Sub

ヘルプでは、Select Caseの後ろには「任意の数式または文字列式を指定します」と書かれています。Trueを指定する用例は記載されていません。でも、指定できます。さらに、この書き方をすると、Case節に好きなことを何でも書けます。

Sub Macro1()
    Select Case True
    Case Range("A1") > 100
        結果1
    Case Left(Range("A2"), 1) = "B"
        結果2
    End Select
End Sub

裏技とは言いませんが、アンドキュメントな使い方です。私がこの書き方を知ったのは、90年代の初頭、VBAではなく、VB 2.0の「ウルトラテクニック集(英語版)」を読んだときです。あまりの感動に、驚き、喜び、庭駆け回ったのを覚えています。これができると、Select Case最強です。何でもできます。当時から現在でも、よく使っているテクニックですし、今となっては「なぜ、これで正しく動作するのか」という、VBA内部での仕組みも理解しています。

さて、SWITCH関数は、VBAのSelect Caseと同じような仕組みなら、もしかして、同じことができるんじゃね?って、しばらく使っていて気づきました。やってみたら、できました。

セルA1とセルB1のように、異なるモノを判定していますし、さらに「500より大きい」と大小比較もできます。いやぁ~、SWITCH関数を知ったとき、この使い方に気づかなかった自分が情けないです。恥ずかしいので、本当はこの追記も書きたくなかったです。まぁ、こんなこともありますw。

ということで、では、実務で両者をどう使い分けるのかについて再考してみます。

SWITCH関数にTRUEを指定することで、領域展開なみにパワーアップしますから、両者で「できること」に違いはありません。違うのは、書き方くらいでしょうか。となれば「どっちでもいい」という結論です。ただ、強いて細か~い点を考慮すると、実務ではIFS関数をオススメします。理由は2つです。ひとつめは、TRUEを指定するという使い方が、ヘルプなどMicrosoftの公式解説には記載されていないからです。実務の現場で、前任者が作ったワークシートを引き継ぎます。どんな関数が使われているのかを調べたら、SWITCH関数が使われていたと。しかも、判定する引数に、何やらTRUEと書いてある。これは、どういう意味なのか?そもそも、なぜこれで正しく計算されるのか。調べたところで、正確な情報にたどり着くことは難しいでしょう。となれば、意味が分からずに引き継ぐということになります。これは最悪です。だったら、後任者のためにも、公式に解説されている使い方をするべきです。もうひとつの理由も、実に細かい話です。SWITCH関数より、IFS関数の方が、入力しやすくないですか?IFS関数は、IF関数に複数形の"S"がついた名前です。SUMIF関数とSUMIFS関数のように、名称に"S"がつくと「なんか、条件を複数指定できるのかなぁ?」って類推できます。SWITCHとかSelectって、プログラミング経験者だったらピンときますが、そういう方ばかりではありません。なので、これも後任者の負担を減らすためには、名称に馴染みのあるIFS関数を使う方が、いくぶん分かりやすいのかなって思います。まぁ、いずれにしても細かい話です。