基于SKU前缀(第二个分隔符前)的递增计数器函数优化需求
解决方案
针对Excel 365/2021(支持LET函数,公式更简洁)
在Y2单元格输入以下公式,下拉填充即可:
=LET( raw, A2, norm, SUBSTITUTE(raw, "-", "_"), first_pos, FIND("_", norm), second_pos, IFERROR(FIND("_", norm, first_pos + 1), LEN(norm) + 1), sku, LEFT(raw, second_pos - 1), SUMPRODUCT(--(LEFT(A$2:A2, IFERROR(FIND("_", SUBSTITUTE(A$2:A2, "-", "_"), FIND("_", SUBSTITUTE(A$2:A2, "-", "_")) + 1) - 1, LEN(A$2:A2))) = sku)) )
针对旧版Excel(无LET函数支持)
在Y2单元格输入以下公式,下拉填充即可:
=SUMPRODUCT(--(LEFT(A$2:A2,IFERROR(FIND("_",SUBSTITUTE(A$2:A2,"-","_"),FIND("_",SUBSTITUTE(A$2:A2,"-","_"))+1)-1,LEN(A$2:A2)))=LEFT(A2,IFERROR(FIND("_",SUBSTITUTE(A2,"-","_"),FIND("_",SUBSTITUTE(A2,"-","_"))+1)-1,LEN(A2)))))
公式说明
- 统一分隔符:用
SUBSTITUTE(A2,"-","_")把单元格中的-全部替换为_,避免同时处理两种分隔符的麻烦。 - 定位第二个分隔符:
FIND("_", norm)找到第一个_的位置;FIND("_", norm, first_pos + 1)从第一个_的下一位开始找第二个_,用IFERROR处理没有第二个分隔符的情况(此时取字符串长度+1,确保提取到整个有效内容)。
- 提取SKU标识:
LEFT(raw, second_pos - 1)截取到第二个分隔符之前的内容,作为计数的唯一标识。 - 累计计数:
SUMPRODUCT(--(...))对比当前行以上(含当前行)所有单元格的SKU标识,统计与当前标识一致的数量,实现相同标识递增、不同标识重置为1的效果。
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

