【注意】
CSE数式は今後互換性のために残されるが、SPILLを利用した方が良いとのことです。本記事は現場でどうしてもCSE数式を使わないといけない場合など、やむを得ない状況でのリファレンスとしてご利用ください。
https://support.office.com/ja-jp/article/%E5%8B%95%E7%9A%84%E9%85%8D%E5%88%97%E6%95%B0%E5%BC%8F%E3%81%A8%E3%80%81%E3%81%93%E3%81%BC%E3%82%8C%E3%81%9F%E9%85%8D%E5%88%97%E5%8B%95%E4%BD%9C-205c6b06-03ba-4151-89a1-87a7eb36e531
概要
配列数式(以下、CSE数式)の使い方を忘れないための覚書。
解説
例えば以下のように入力されたA列の値からセルC1のような値を作成したいとする。
自然にイメージするなら、処理の手順は 数値を括弧で囲む
⇒ それらの文字列をハイフンで連結する
となるだろう1。これをCSE数式なしで実現する場合は、以下のように処理の途中で発生する 数値を括弧で囲む
の結果をセルに書き出す必要がある。
これをCSE数式を使って実現すると、以下のようになる。
数値を括弧で囲む
がTEXTJOIN関数の第3引数として指定した "("&A1:A9&")"
で実現されているため、処理中における計算結果の書き出しが省かれている。括弧の間の値 A1:A9
が単一セルではなくセル範囲のアドレスである点に注目する。これは範囲内の各セルの値を一つずつ指定したのと同義であるため、結果は配列形式で返ってくる。
"("&A1:A9&")"
の結果が配列形式であることを検証してみる。セルC3に同数式を入力し、F2キーを押して編集モードへ移行する。
ここでF9キーを押すと、計算結果が展開される。複数の値がセミコロンで区切られ、全体が波括弧で囲まれているため、計算結果が配列形式であることが確認できる。
そしてTEXTJOIN関数の第3引数以降は可変長のオプションである点に注目する。ここに配列を渡すと、イメージとしては値が以下のように展開されて処理される。
まとめ
CSE数式は、関数の可変長引数に配列を展開して渡したい時に使うものである。
処理途中の計算結果をセルに書き出す必要が無いため、「ドキュメントして無意味なデータ」を省くことが出来る点は、ドキュメントを美しく仕上げられるメリットである。しかし、途中の計算を一切書き出さない数式は作成する難易度が上がるうえに見通しが下がる。また、CSE数式を知らない人(特に非エンジニア)が触って非CSE数式にしてしまった場合にパニックを起こすことを考えると、ドキュメントの美しさと運用の都合を慎重に計らなければならないだろう。
-
セマンティクスに則るなら、という意図である。多少の分かりにくさに目を瞑るなら
="("&TEXTJOIN(")-(",TRUE,A1:A9)&")"
という非CSE数式でも良い。 ↩