なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた、ようこそ

数式/関数:イータ縮小ラムダを文字列として抜き出す

使えるかどうかでは別として、発見したことがいずれ誰かの学びにつながるかもしれないということでブログに残しておきます。

複数の集計方法を一括で計算する(1つずつ計算して結合)

上の画像のA列の値を使って「件数」「合計」「平均」を1つの数式で計算するとします(それぞれの結果をスピルで表示させる)。単純には一個ずつ計算して HSTACK関数で繋げばいいわけですけども、それだと1つの範囲を3回参照することになりますね。

=HSTACK(
    {"件数";"合計";"平均"},
    VSTACK(COUNT(A2:A11),SUM(A2:A11),AVERAGE(A2:A11))
)

LET関数で範囲を定義したとしても、なんとなくすっきりしません。

複数の集計方法を一括で計算する(AGGREGATE関数を使う)

とはいえ計算自体は、AGGREGATE関数を使えばまとめられます。

=HSTACK({"件数";"合計";"平均"},AGGREGATE({2;9;1},,A2:A11))

第一引数の集計の方法で「2(数値の個数)」「9(合計)」「1(平均)」を配列定数で指定すればいいので、簡単ではあります。ただし、見出しにあたる「件数」「合計」「平均」は別で用意する必要がありますので、これもなんだか二度手間な気がします。使える集計方法も 19個だけですしね。

複数の集計方法を一括で計算する(GROUPBY関数を使う)

GROUPBY関数を使ってもいいんですが、それだと集計結果の形が固定になります。今回の場合なら縦横入替だけなので、TRANPSOSE関数にネストすれば一応その形にはなりますけども。

=TRANSPOSE(GROUPBY(,A2:A11,HSTACK(COUNT,SUM,AVERAGE)))

集計結果を別の形に加工しようとすると色々面倒です。例えば結果を「COUNT:10,SUM:55,AVERAGE:5.5 」と1セルに表示したい場合は、困ることになります(これが見やすいかどうかは別として)。

なんとか「HSTACK(COUNT,SUM,AVERAGE)」から、「COUNT」「SUM」「AVERAGE」を文字列として抜き出せないものでしょうか。

複数の集計方法を一括で計算する(VALUETOTEXT関数を使う)

色々試してみたところ、意外な関数で抜き出しできました。

=LAMBDA(数値,関数,LET(
    計算,関数(数値),
    関数名,VALUETOTEXT(関数),
    HSTACK(関数名,計算)
))(A2:A11,VSTACK(COUNT,SUM,AVERAGE))

VALUETOTEXT関数を使うとイータ縮小ラムダの「COUNT」「SUM」「AVERAGE」を文字列として抜き出せました。これなら指定した関数と集計方法の見出しが必ず一致しますし、先ほどのように集計結果を加工するのも簡単ですね。

=LAMBDA(数値,関数,LET(
    計算,関数(数値),
    関数名,VALUETOTEXT(関数),
    TEXTJOIN(",",,関数名&":"&計算)
))(A2:A11,VSTACK(COUNT,SUM,AVERAGE))

使える場面は少ないかもしれませんが、知らないとできないことだと思いますので、この記事がどこかの誰かの役に立てばいいなと思います。