如何用单个ARRAYFORMULA计算A列数字的各位之和并输出到B列?
用单个ARRAYFORMULA计算A列数字的各位之和
没问题,我帮你搞定这个批量计算各位数字之和的需求!你之前拆分数字的思路已经很对了,只是卡在了批量对每行的拆分数字求和这一步,下面给你两种可行的方案,完全用ARRAYFORMULA实现:
方案一:MID+MMULT(高效适合大数据量)
直接在B1单元格输入这个公式,就能自动计算A列所有数字的各位之和:
=ARRAYFORMULA(IF(A:A="",,MMULT(--MID(A:A&"",SEQUENCE(1,MAX(LEN(A:A))),1),SEQUENCE(MAX(LEN(A:A)),1,1,0))))
拆解一下逻辑:
IF(A:A="",, ...):跳过A列的空单元格,避免返回不必要的0MID(A:A&"", SEQUENCE(1, MAX(LEN(A:A))), 1):把A列每个数字拆成单个字符的横向数组,SEQUENCE会生成从1到A列最长数字长度的序列,确保所有位数都能被拆分到--:把拆分出来的文本字符转成可计算的数字MMULT(...):用矩阵乘法实现逐行求和,第二个参数是全1的列数组,相当于把每行的所有单个数字加起来
方案二:基于你的REGEX思路改进(可读性更强)
如果你更想沿用自己用REGEXEXTRACT拆分的方法,套个BYROW就能批量处理了:
=ARRAYFORMULA(IF(A:A="",,BYROW(A:A,LAMBDA(x,SUM(VALUE(REGEXEXTRACT(x&"",REPT("(.)",LEN(x)))))))))
解释一下:
BYROW(A:A, LAMBDA(x, ...)):遍历A列的每一行,把当前行的数字传给变量x- 括号里的
SUM(VALUE(REGEXEXTRACT(...)))就是你之前写的单个数字求和逻辑,现在能自动应用到每一行了
为什么你之前的方法行不通?
你之前的公式只能处理单个单元格,而且SUM()没办法在ARRAYFORMULA里自动识别“对每行的横向数组求和”——要么用BYROW明确指定逐行处理,要么用MMULT通过矩阵运算实现批量求和,这两个是关键的解决点。
内容的提问来源于stack exchange,提问作者Riyaz Mansoor
相关产品推荐
相关产品推荐

