新しい関数が増えた


新しいワークシート関数が追加されました。ただし、追加されたのはProPlusの方だけです。ProPlusに関しては「Excel 2016は3種類ある」をご覧ください。

それぞれの関数について、詳しい使い方やポイントなどは、いずれ「この関数はこう使え」に書きますので、少しお待ちください。ここでは、紹介だけします。

追加されたのは、次の関数です。

  • MAXIFS 関数
  • MINIFS 関数
  • IFS 関数
  • SWITCH 関数
  • CONCAT 関数
  • TEXTJOIN 関数

MAXIFS 関数 / MINIFS 関数

これは分かりやすいですね。SUMIFS 関数やCOUNTIFS 関数と同じように、複数条件を指定した"最大値"や"最小値"を求められます。

実務で、最大値や最小値を求める機会って、それほど多くはありません。でも、まったくやらないわけではないし、単純な数値だけでなく、日付も求められますしね。追加されたのは嬉しいです。きっと何かのとき役立つでしょう。

IFS 関数 / SWITCH 関数

これは画期的。とても助かります。IFS 関数は、その名の通り、複数条件を指定できる IF 関数です。

上図は、もしA列が80より大きかったら"A"、B列が80より大きかったら"B"、どちらでもなかったら"C"と表示しています。IFS 関数は要するに「=IF(IF(IF(~」と IF 関数のネストを1つでできる関数です。これを IF 関数のネストで書くと次のようになります。

=IF(A2>80,"A",IF(B2>80,"B","C"))

まぁ、今回は2つのIFで済んでますけど、「=IF(IF(IF(IF(IF(IF(~」って、どんんだけIF重ねんじゃい!と突っ込み入れたくなる数式使っている人は多いですよね。少しは可読性が高くなるかも。条件は最大で127個まで指定できるそうです。でも、できるからといって、調子に乗って条件を増やしていったら、逆に意味が分からなくなるでしょう。よい子は真似しちゃダメだぞ。IFS 関数で嬉しいのは、引数の一番最後に「どの条件にも一致しなかったら」を記述できるところですかね。上図では、最後の「TRUE, "C"」ってのがそれです。ただ、注意しなければいけないのは、条件を判定する順番です。これ、必ず左から順番に判定して、真のところで判定が止まります。つまり、複数の条件が真になるようなときは、左側に書いた条件が優先されるということです。5行目を見てください。セルA5もセルB5も80より大きいです。結果は"A"です。

SWITCH 関数も IFS 関数と同じように、複数の条件を指定できます。IFS 関数と違うのは、判定(評価)するものは1つです。IFS 関数は「A1>80」「B1>80」という別々の条件を指定できますが、SWITCH 関数は「A1が~」みたいに条件に指定できるものは1つです。2番目以降の引数には「○だったら×」というセットを指定しますが、最後の引数に1つだけ指定されたものは「どれでもなかったら」になります。たとえば上図で、これを指定しないとエラーになります。

項目の少ない、簡単なVLOOKUPみたいなことができるかもしれませんね。

CONCAT 関数 / TEXTJOIN 関数

個人的には、この2つに拍手です。よくぞ作ってくれたと。

セル内の文字列を結合するとき、一般的には&演算子や CONCATENATE 関数を使うしかありませんでした。でも、どちらも、セルを一つずつしか指定できませんでした。たくさんあると、もう面倒で面倒で…「なんで、こっからここまでを全部結合、ってのができないんだよ~」と文句を言っていたのは、私だけではないはずです。それができるようになりました。さらにもうひとつ。

これは、喜ぶ人多いんじゃないんですか?VBAの Join 関数に似ていますけど、もっと柔軟ですね。最初の引数に区切り文字を指定します。2番目の引数に、空欄セルの扱いを指定します。

これを使うと、3つの数値から日付(シリアル値)を作るのも簡単になります。

さらに嬉しいのは、この TEXTJOIN 関数は、VBAから呼び出すことも可能です。

Sub Sample1()
    MsgBox WorksheetFunction.TextJoin(",", True, Range("A1:D1"))
End Sub

もちろん、配列もいけます。

Sub Sample2()
    Dim A(3)
    A(0) = "田中"
    A(1) = 123
    A(2) = "横浜"
    A(3) = 789
    MsgBox WorksheetFunction.TextJoin(",", True, A)
End Sub

これだったら、Join 関数でも可能なんですが、いかんせん Join 関数は引数に一次元配列しか指定できませんでした。セル範囲を指定できたら、CSVの出力などで超便利になるのになぁ~と、何度泣いたことだか。ちなみにセル範囲は必ず二次元配列になります。これからは、TEXTJOIN 関数の時代ですね。

対応していなかったら

さて、気になるのはお値段です。もとい!気になるのは「対応していないExcelで開いたらどうなるのか」ですよね。やってみましょう。上記のサンプルをProPlusではないExcel 2016で開いてみます。

開いただけだったら、保存時の計算結果を保持しています。でも、値を変更したり、数式を入力し直すと

もちろんエラーです。ただ、セル内の関数が消えてしまうわけではないので、エラーになった状態でも、対応しているProPlusで開けば計算できます。