网友问ALT+=搞不定的分组小计,我用AI写了个复杂公式,错了两次才对

古哥计划
古哥计划 Lv.4 核心创作者KVP

Lv.4 核心创作者

一个用Excel十几年的用户,在WPS社区发了个帖子:小计行求和再汇总,ALT+=不好使了,一个一个输入太麻烦,有没有高手一键搞定。

这个问题看着简单,真动手写公式的时候,我发现了三个隐藏的坑。今天把整个过程拆开讲讲——我是如何用AI写出一个复杂公式的,包括AI错了两次、我修了两次的全过程。

图1:WPS社区帖子——「关于求和这个怎么快速求和」提问页,附提问者的红色小计表格截图

一、问题长什么样

提问的人是一家五金配件厂的,表格里是螺母、螺钉、垫片这些标准件的报价明细。红色数字是小计行,每隔一段就有一行空行隔开,空行上是这一组的合计。

他要的效果是:普通行算每行自己的和,空行处自动算出这一组的小计。

用传统做法,ALT+=只能加相邻区域,碰到不规则空行分组就废了。手动一个个输SUM,几十个分组能输到眼花。

我拿一个简化模型复现了这个场景:数据1、数据2两列,12行数据,第7行和第13行是空行。期望结果是——普通行35或45,空行处分别出175和225。

图2:空行求和.xlsx——D2公式栏与D列结果,第7行175、第13行225两组小计高亮

二、第一版公式:AI翻车了

我把需求丢给灵犀,它很快给了一版公式:

=LET(d,B2:.C13,b,TAKE(d,,1),s,BYROW(d,SUM),
     cum,SCAN(0,s,LAMBDA(a,v,a+v)),
     base,SCAN(0,SEQUENCE(ROWS(d)),LAMBDA(a,i,IF(INDEX(b,i)=""",INDEX(cum,i),a))),
     IF(b="",cum-base,s))

思路是对的:BYROW逐行求和,SCAN做累计,空行处用「累计减组起点」算小计。逻辑我检查了一遍,没毛病。

写入表格,结果第7行、第13行全是0,而且溢出只有11行,最后一行直接没了。

图3:灵犀对话截图——第一版公式写入后D7=0、D13为空的调试现场

三、两个藏在细节里的坑

排查的过程,其实就是把公式拆成零件,一个一个单独测试。

坑一:区域语法糖会裁掉末尾空行。

B2:.C13这种写法,看着是B2到C13,实际上它像TrimRange一样,会把末尾的空行自动裁掉。B13是空的,所以整个区域只剩11行,第13行的小计自然没地方算。

解法:这种情况必须用显式范围B2:C13,别贪语法糖。

坑二:数组里空单元格是0,不是空文本。

公式里用b=""判断空行,测试全不命中。在数组上下文里,空单元格返回的是0,判断得写b=0。

修完这两个,第7行出结果了,但值还是不对——0。

为什么?我把base这个SCAN拆出来单测,发现它在边界行「当行」就把组起点更新成了自己的累计值,cum-base等于自己减自己,永远是0。

解法:再造一个滞后一行的变量p,取「上一个空行处」的累计值,小计=当前累计−上一个边界的累计。

图4:灵犀对话截图——分步调试辅助列,cum、base、p三个中间变量逐列验证

四、最终公式

三个坑全填上之后,D2一格录入,12行全部溢出,和期望值逐行一致:

=LET(d,B2:C13,b,TAKE(d,,1),s,BYROW(d,SUM),
     cum,SCAN(0,s,LAMBDA(a,v,a+v)),
     J,SCAN(0,SEQUENCE(ROWS(d)),LAMBDA(a,i,IF(INDEX(b,i)=0,INDEX(cum,i),a))),
     p,SCAN(0,SEQUENCE(ROWS(d)),LAMBDA(a,i,IF(i=1,0,INDEX(J,i-1)))),
     IF(b=0,cum-p,s))

公式解释:

  • d:数据区域,两列12行

  • s:BYROW逐行求和,普通行直接用

  • cum:SCAN累计和,算到每一行为止的总和

  • J:记住每个空行处的累计值,作为组边界

  • p:把J滞后一行,取到「上一个空行」的累计

  • IF(b=0,cum-p,s):空行输出小计,普通行输出本行和

图5:灵犀对话截图——验证通过的对比表,D列结果与期望175/225逐行打勾

我把这个公式回了帖子,一楼就是完整的LET版本。那位老哥用的WPS正好支持动态数组,复制进去改个区域就能用。

五、最后说一句

这单给我的触动不是公式本身,而是AI写公式的正确姿势。

AI第一版就给出了正确的思路框架——累计减组起点,这个设计我自己想也得琢磨一阵。但它在两个执行细节上栽了跟头:语法糖的隐藏行为、数组里空值的真实形态。

说白了,AI负责搭骨架,人负责验收。你不需要会写SCAN嵌套LAMBDA,但你得会做一件事:拿小数据集逐行核对结果。175和225这两个数,就是人和AI分工的最好注脚——AI三分钟给出方案,我十分钟填上它看不见的坑。

公式可以复杂,验收必须简单。这是用AI写公式这两年,我总结出的最重要一条。


古老师(古哥计划)|中小制造数字化专家|金山 KVP(金山办公最有价值专家)|金山多维表格应用场景专家|金山 WPS 社区优秀创作者

深耕中小制造业数字化落地,擅长用 WPS 多维表格 + AI 低代码方案,帮工厂快速搭建进销存、生产计划、质量追溯等轻量化系统。不用复杂 IT,低成本落地,已服务数百家制造企业,实战经验丰富。

#多维表格 #工厂管理 #AI应用

本文由 AI 辅助创作

工具:AI 灵犀专业版

模式:Pro 模式(智能判断模型)


术语解释

文章里出现的技术名词,一句话说清楚:

动态数组

公式写在一格,结果自动「溢出」填满整列,不用下拉填充。就像倒一杯水自己铺满整个杯子。

LET

给公式里的中间结果起名字,先算好存起来,后面反复用。好比先把材料切好配好,炒的时候直接抓。

BYROW

对区域里每一行分别执行同一个计算。相当于流水线上每一件产品都过一遍同一道工序。

SCAN

带着上一步的结果算下一步,像滚雪球一样逐步累计。

LAMBDA

自己造一个临时小函数,现写现用。

区域语法糖(B2:.C13)

简化区域写法,会自动裁掉末尾的空行空列。省字,但有空行数据时会"吃掉"你的边界行。

江西省
浏览 47
收藏
3
分享
3 +1
+1
全部评论