书接前文,今天讲一下递归函数的升级用法,将合并单元格内的每个元素拆分出来进行累计计算。
案例:拆分下图 1 中 A2 单元格的数值,进行右侧标题所要求的累计计算。
效果如下图 2 所示。


1. 在 C2 单元格中输入以下公式:
=SCAN(,--TEXTSPLIT(A2,,","),SUM)


公式释义:
scan 函数的作用是通过对每个值应用 LAMBDA 来扫描数组,并返回具有每个中间值的数组;
语法为 SCAN([累加器的起始值],数组,lambda (累加器,数组中的当前值,应用于数组中每个元素的计算));
公式中第一个参数省略,表示将第一个元素作为初始值存在累加器中,第二次迭代的时候,从第二个数开始取值,即用累加器的值加上第二个元素,然后依此类推;
--TEXTSPLIT(A2,,","):
textsplit 函数的作用是使用列和行分隔符拆分文本字符串;
语法为 TEXTSPLIT(要拆分的文本,拆分为列的分隔符,[拆分为行的分隔符],[指定 TRUE 可以忽略连续分隔符], [匹配方式,1 不区分大小写,0 区分大小写], [用于填充结果的值]);
此处的公式表示将 A2 单元格以“,”为分隔符拆分为行;
公式前面的“--”用于将文本值转换成数值;
sum:需要迭代计算的函数;
最后用 scan 函数依次列出每个元素的结算结果,呈现出来的就是累计求和结果。
2. 在 D2 单元格中输入以下公式:
=SCAN(,--TEXTSPLIT(A2,,","),LAMBDA(x,y,x-y))


公式释义:
与前一个公式不同之处在于将 scan 函数的最后一个参数改成了 LAMBDA(x,y,x-y),这是因为 Excel 中并没有现成的减法函数,因此用 lambda 执行递归相减,用累加器的值减去当前元素;
D2 单元格的值为第一个元素的值 1,它是累加器的起始值;
D3 的值为累加器的值 1 减去第二个元素 2,结果为 -1……依此类推。
3. 在 E2 单元格中输入以下公式:
=SCAN(,--TEXTSPLIT(A2,,","),PRODUCT)


公式释义:
公式原理一样,最后一个参数 product 是乘积函数。
4. 在 F2 单元格中输入以下公式:
=SCAN(,--TEXTSPLIT(A2,,","),LAMBDA(x,y,x+y^2))


公式释义:
求平方和也没有现有现成的函数,因此用 lambda 来设置。