Excel関数でも入れ子構造が深くなったり、構造が複雑になると可読性が下がりますよね
Excel関数にプログラミング言語の定数みたいな挙動をさせて、よりシンプルなセルにするアイデアを場合別に2つご紹介します。
1.LET関数を使う(Excel 2021~)
LET関数はExcel2021から登場した比較的新しい関数で、その名の通り、セルに変数(のようなもの)を設定することができます。
1つのセルに同じExcel関数が複数回登場するときなどに使えます。
例えば、XLOOKUP関数の結果が0の場合ある関数で処理、1の場合また別の関数で処理……みたいな関数を考える時、IF関数の引数としてXLOOKUP関数(←1関数が長い)が何度も登場すると、可読性が大きく下がりますよね。
可読性とはすなわち保守性。侮ってはいけません。
そこでLET関数を使うことで、セルの中身をシンプルにすることができます。
LET関数はこんな関数です。
LET (name1、name_value1、calculation_or_name2、[name_value2、calculation_or_name3...])
要は、1番目の引数で名前を宣言、2番目の引数にその値を代入すると覚えていただければOKです。そして後続の処理は3番目以降の引数に書きます。
つまり、さっきのXLOOKUP関数の例をとると
=IF(XLOOKUP(何かの引数・・・)=0,"値は0だよ!",IF(XLOOKUP(何かの引数・・・)=1,"値は1だよ!",CONCAT("値は",XLOOKUP(何かの引数・・・),"だよ")))
と、えらく長くなるわけですが、LET関数を使って、XLOOKUP関数の値にvalueという変数名を与えると、
=LET(value,XLOOKUP(何かの引数・・・),IF(value=0,"値は0だよ!",IF(value=1,"値は1だよ!",CONCAT("値は",value,"だよ")))
と、だいぶ見やすくなります。
※CONCAT関数……CONCATENATE関数の後続です(Excel 2019~)。セル範囲での結合等もできるので使いやすいです。
LET関数は、特にプログラミング言語に親しんでいる方からするとかなり使い勝手のいい関数だと思いますので、是非色々試していただければと思います。
2.非表示のセルを変数代わりにする
こちらは、同一の計算結果等の値を複数のセルで参照する場合のアイデア。
例えばCONCAT関数などで成形した文字列をベースに、複数のセルでそれぞれ違う値を結合したりする場合などに、いちいちCONCAT関数をセルごとに記載するのではなく、親となる計算結果は1つのセルにまとめ、そのセルを非表示にしたうえで、子のセルは親のセルの値を参照する、というやり方です。
例えば
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 名字 | 名前 | 社員番号 | 様付け | さん付け | 社員番号つき |
2 | 柳田 | 悠岐 | 19881009 |
1列目をヘッダ行とするこんなExcelがあったとします。
A~C列は別のファイルからコピペしてきた、みたいな想定です。
上記を例に、D2に「柳田悠岐様」、E2に「柳田悠岐さん」、F2「柳田悠岐(19881009)」と入力したい場合、特に工夫しないでやるとしたら、
D2:CONCAT(A2,B2,"様")
E2:CONCAT(A2,B2,"さん")
F2:CONCAT(A2,B2,"(",C2,")")
と書くことになろうと思います。
いちいちA2,B2と参照するのは、ちょっと面倒。
そういう表を次のように成形してみます。
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | 名字 | 名前 | 社員番号 | 様付け | さん付け | 社員番号つき | (隠し行) |
2 | 柳田 | 悠岐 | 19881009 | =CONCAT(A2,B2) |
G2の結果は「柳田悠岐」となり、それぞれ以下のような記載になります。
またこの時、G列を非表示設定しておくと、見栄えも綺麗なままです。
D2:CONCAT(G2,"様")
E2:CONCAT(G,"さん")
F2:CONCAT(G2,"(",C2,")")
……多少可読性上がりましたよね?
もしD~F列の結果が想定外になったら、G列を見に行けば一度で修正できるので、保守性も高くなります。
今回の例はシンプルですが、応用すると結構使えるはず。
ちなみに今回は2つの表で列番号を変えたくなかったのでG列に追加いていますが、C列あたりに挿入した方がわかりやすいかもしれません。
まとめ
今回は、Excelで定数っぽいことをする方法を2種類ご紹介しました。
関数が複雑化すると、特に複数人で管理するファイルなどでは悲しい事故が起こりがち。
保守性も考えたファイルづくりを意識しておくと、あとあと助かるのは自分です(笑)