ver16.0.6568.2016でExcelに追加されたワークシート関数について
怪奇!いつ追加されたのかわからないワークシート関数!
というわけで追加されたという新しい6個のワークシート関数について調べていきたいと思います
解説は知らないので公式のドキュメントとかを待つとよいかと
追加されたのは
IFS
SWITCH
MAXIFS
MINIFS
CONCAT
TEXTJOIN
ですね。とりあえず一つずつ見ていきます
インクとかの他の情報については昨日の記事でどうぞ
artfulplace.hatenablog.com
追記(2/24):Office Blogで関数についての記事が書かれてたのでそっちをどうぞ
blogs.office.com
IFS関数
プログラミング的に考えるとIf, ElseIf, ElseIf... って感じ。Elseはないです
定義としてはこんな感じ
IFS(logical_test1, value_if_true1 [, logical_test2, value_if_true2] ...)
logical_test* (*には数字が入る)は真偽値を返す式、値を入力します。
value_if_test* は対応する数字のlogical_test*がtrueの場合に返す値を入力します
IFSが返す値は最初に条件を満たした logical_test* に対応する value_if_test* です。これ以降に条件を満たす logical_test* があったとしても無視されます。
すべての logical_test* が false を返す場合 #N/A が返されます
例として書くとこんな感じ。
J7 = 3, J8 = 4, J9 = 10 とします
IFS(J7 = 1,"a",J7 = 2,"b",J7 = 3,"c",J7 = 4,"d",J7 = 5,"e") // = "c"
IFS(J8 = 1,"a",J8 = 2,"b",J8 = 3,"c",J8 = 4,"d",J8 = 5,"e",J8 = 4,"f") // = "d"
IFS(J9 = 1,"a",J9 = 2,"b",J9 = 3,"c",J9 = 4,"d",J9 = 5,"e",J9 = 4,"f") // = #N/A
Else取れないの案外面倒くさい…
SWITCH関数
CのswitchよりもVBのSelect Caseに近いというかVBAのInteraction.Switchというそのものな名前の関数がいる
定義はこんな感じ
SWITCH(expression, value1, result1 [, value2, result2] ...)
expressionには基となる値を入れます
value*, result* は expression が value* と等しい時に SWITCH 関数が返す値 result* をそれぞれ入力します
日本語難しい
SWITCHもIFS同様に最初に等しい値だった value* に対応する result* を返します。これ以降に等しい値となる value* が存在しても無視されます
expression と等しい value* が存在しない場合は #N/A を返します
例を書くとこんな感じ
J7 = 3, J8 = 4, J9 = 10 とします
SWITCH(J7, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e") // = "c"
SWITCH(J8, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f") // = "d"
SWITCH(J9, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f") // = #N/A
追記(2/24):SWITCHのほうは既定値が設定できるようです
IFSと同じかと思っていた…
J9 = 10とするとこんな感じ
SWITCH(J9, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f", "x") // = "x"
MINIFS, MAXIFS関数
どっちも似たようなものだし(何とか)IFSがわかれば簡単ですし…
定義はこんな感じ
MINIFS(min_range, criteria_range1, criteria1 [, criteria_range2, criteria2] ...)
MAXIFS(max_range, criteria_range1, criteria1 [, criteria_range2, criteria2] ...)
MINIFSはすべてのcriteria*を満たしているmin_range内の値の中で最も小さい値を返します
MAXIFSはすべてのcriteria*を満たしているmax_range内の値の中で最も大きい値を返します
やったね!コピペがはかどるよ!!
正直SUMIFSとかAVERAGEIFSで使い方見たほうが早いんじゃないですかねこれ…
すべてのcriteria*の判定終了後にmax_range, min_rangeに値が一つもない場合0を返します
例を書くとこんな感じなのかなぁ。SUMIFSでググったほうが絶対にわかると思う
A1:A5にはそれぞれ1,2,3,4,5が入っていることとします
MINIFS(A1:A5, A1:A5, ">3") // = 4
MAXIFS(A1:A5, A1:A5, ">3") // = 5
MINIFS(A1:A5, A1:A5, ">6") // = 0
MAXIFS(A1:A5, A1:A5, ">6") // = 0
TEXTJOIN, CONCAT関数
CONCATENATE?あいつは死んだんだ…
定義はこんな感じ
CONCAT(text1, [,text2] ...)
TEXTJOIN(delimiter, ignore_empty, text1 [, text2] ...)
CONCATは引数に指定したテキストをすべてそのまま結合して返します
TEXTJOINは指定した text* を delimiter で区切りを入れながら結合します。このとき空のセルが含まれる場合は無視することもできます
これは例を見たほうが早いですね
A1 = "aaa", A2 = "bbb", A3 = "ccc", A4 = "" として、A1 ~ A4を結合してみます
CONCAT(A1,A2,A3,A4) // = "aaabbbccc"
TEXTJOIN(",", FALSE, A1,A2,A3,A4) // = "aaa,bbb,ccc,"
TEXTJOIN(",", TRUE, A1,A2,A3,A4) // = "aaa,bbb,ccc"
こんな感じでとりあえずくっつけるならCONCATを、区切り文字も指定したい場合はTEXTJOINを使う形で行くとよいです。
ん? 君は…CONCATENATEじゃないか!どうしたんだ! なに? 俺が付いてるだろって?
CONCATENATE(A1,A2,A3,A4) // = "aaabbbccc"
そうだな、確かにCONCATと同じ値が返ってくるな
残念ながら君の役目は終わったのだよ
CONCAT(A1:A4) // = "aaabbbccc"
TEXTJOIN(",", FALSE, A1:A4) // = "aaa,bbb,ccc,"
TEXTJOIN(",", TRUE, A1:A4) // = "aaa,bbb,ccc"
CONCATENATE(A1:A4) // = #VALUE!
というわけでレガシーーーExcelと何かするでもなければCONCATENATEではなくCONCATを使いましょう
とりあえず追加分は全部書いたはず
ちなみにIFSとSWITCHはWorksheetFunctionに追加されていません。どこから湧いてきたんだ
って思ったけどこんなんVBAで処理できない気がするんだよな…
この辺で