エクセル数式の対応バージョン判定ツール

エクセルの関数の対応バージョンを覚える気がないので判定するツールを作りました。このツールは隠しておくほどのものでもないのでオープンにしちゃいます。

別の投稿でも説明したように、作ったツールを相手が使えるか確認するのに対応表を確認するのが面倒なのでこの数式で確認したい数式のセルを読み込むことで使えるバージョンを簡単に判定できるようにしてみました。

数式としては、対象の数式を大文字にした文字列として読み込んで(FORMULATEXT>UPPER)、IFS関数でバージョンごとに条件分けして、バージョンごとに羅列した関数名のいずれかがあたると何字目かの数字を返して(FIND)、エラーを回避しつつ(IFERROR)合計した数値が0より大きければ(いずれかの関数に該当すれば)そのバージョンと判定しながら、365からそれ以前のバージョンを順番に判定していきます。今はそれ以外だと2003以前としちゃう雑な設計です(今作ったのでご愛敬)。ついでに言うと文字列として関数名が入っているとそのバージョンとして判定してしまうのでその点も課題ですかね。そうか、"関数("みたいな書き方にすればいいかもですね。直す気はないけど。

でも、判定に使う関数は「;"関数"」で単純に足せば追加できるし、メンテナンス性も割といいんじゃないかと思ってます。

参考までに少し改良したバージョンの数式も置いておきます。

=LET(数式,UPPER(FORMULATEXT(A2)),IFS(
SUM(IFERROR(FIND({"UNIQUE";"DROP";"REDUCE";"LAMBDA";"VSTACK";"HSTACK";"TEXTSPLIT";"TOCOL";"TOROW";"WRAPROWS";"WRAPCOLS"},数式),0))>0,"Microsoft365用",
SUM(IFERROR(FIND({"XLOOKUP";"XMATCH";"FILTER";"LET";"SORT";"SORTBY";"UNIQUE";"SEQUENCE"},数式),0))>0,"Excel2021かMicrsoft365",
SUM(IFERROR(FIND({"TEXTJOIN";"CONCAT";"IFS";"MINIFS";"MAXIFS"},数式),0))>0,"Excel2019以降",
SUM(IFERROR(FIND("FORMULATEXT",数式),0))>0,"Excel2013以降",
SUM(IFERROR(FIND("TRANSPOSE",数式),0))>0,"Excel2010以降",
SUM(IFERROR(FIND({"COUNTIFS";"SUMIFS";"AVERAGEIFS";"IFERROR"},数式),0))>0,"Excel2007以降",
TRUE,"Excel2003以前(又は未登録関数)"
))

あとあまり使われないIFSの使用例としても参考になるかもしれません。
IFSも使い方は意外と簡単で、条件,結果の組をカンマでひたすら繋いでいくだけで順々に判断してくれて、最後の条件は TRUE にしておけば例外判断もできる感じです。
複数条件のいずれかに該当したら結果●と判断するところは、配列を使ったFINDにすることで実装しています。何か他にも作り方はいろいろありそうですが動くのでヨシ。

むしろ他のデータでも使えるかもしれませんね。

今回は以上です。