You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用数组公式统计Google Sheets中值截至当前位置的出现次数

Google Sheets 统计数组元素截至当前位置的出现次数

问题回顾

你通过公式 =iferror(split(regexreplace(C2, "(.)", "$1_"), "_"),"") 将单词拆分为单个大写字母的数组,需要统计每个位置的字母从数组开头到当前位置的出现次数。例如输入ZOOTOPIA时,对应位置应返回[1,1,2,1,3,1,1,1]。之前尝试的两个公式均无法满足需求:

  • =ARRAYFORMULA(if(len(D2:2), COUNTIF(D$2:2, D2), "")):返回的是每个字母在整行的总出现次数,而非截至当前位置的次数
  • =ARRAYFORMULA(if(len(D2:2), COUNTIF(D$2:D2, D2), "")):仅统计首个字母的出现次数,所有位置返回1

解决方案

方法1:使用MAP+LAMBDA(新版Google Sheets支持)

假设拆分后的字母数组从D2开始横向排列,可使用以下公式:

=ARRAYFORMULA(IF(LEN(D2:2), MAP(D2:2, COLUMN(D2:2), LAMBDA(val, col, COUNTIF(D$2:INDEX(D2:2, col), val))), ""))
  • 逻辑:MAP遍历每个字母和其对应的列号,INDEX(D2:2, col)截取从开头到当前列的范围,再用COUNTIF统计该范围内当前字母的出现次数。

方法2:使用MMULT(兼容旧版Sheets)

如果无法使用LAMBDA函数,可借助矩阵乘法实现:

=ARRAYFORMULA(IF(LEN(D2:2), MMULT(--(TRANSPOSE(D$2:D2)=D2:2), SEQUENCE(COLUMNS(D2:2),1,1,0)), ""))
  • 逻辑:通过TRANSPOSE(D$2:D2)=D2:2生成布尔矩阵标记元素匹配情况,--将布尔值转为0/1,MMULT计算每行累加和,即截至当前位置的出现次数。

验证示例

输入ZOOTOPIA拆分后,两个公式均会返回预期结果:

ZOOTOPIA
11213111

内容的提问来源于stack exchange,提问作者ah2190

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:42:14