Google Sheets统计父项子项数量并提取子项值的公式实现
不用VBA实现父项子项统计与值提取方案
当然可以不用VBA搞定!我给你拆成两个核心步骤,一步步来实现你的需求:
一、优化Count列的子项序号统计
你原来的公式思路没问题,但可以改成更简洁稳定的版本:
在B2单元格输入:=IF(A2=A1,B1+1,1)
然后下拉填充整个Count列。
注:如果是第一行(B1),直接手动输入
1就行,因为没有上一行可以对比。
这个公式的逻辑很直白:如果当前行的Type(A列)和上一行一致,就把上一行的Count值加1;如果Type变了,就重置为1,刚好能统计到Type列变化为止的连续项序号。
二、提取子项的Value到父项的Child Values列
假设你的Value列是C列,Child Values列是D列,我们用TEXTJOIN函数来实现多值拼接(Excel 2016及以上版本、365支持这个函数,旧版可以用替代方法,先讲主流方案):
在D2单元格输入以下公式(Excel 365/2021直接回车,旧版需要按Ctrl+Shift+Enter作为数组公式):=TEXTJOIN(", ", TRUE, IF((A$2:A$1000=A2)*(ROW($2:$1000)>ROW(2))*(COUNTIF(A$2:A2,A2)=1), C$2:C$1000, ""))
然后下拉填充到整个D列。
公式逻辑拆解:
A$2:A$1000=A2:筛选出所有和当前行Type相同的行ROW($2:$1000)>ROW(2):只取当前行之后的行(也就是父项对应的子项行)COUNTIF(A$2:A2,A2)=1:确保当前行是这个Type组的第一行(也就是父项本身,避免子项行也提取值)TEXTJOIN(", ", TRUE, ...):把筛选出来的子项Value用逗号加空格连接,TRUE参数会自动忽略空值
适配你的场景:
- 把公式里的
A$2:A$1000和C$2:C$1000改成你表格实际的行范围(比如你的表格有5000行,就改成A$2:A$5000) - 即便父项最多8个子项,这个公式也会自动提取所有符合的子项值,完全满足需求
额外注意
- 确保你的数据是按Type连续排列的(也就是同一个Type的行是连在一起的,直到Type变化),这是整个方案的前提,和你“统计到Type列值变化为止”的需求匹配
- 如果是非常旧的Excel版本(没有TEXTJOIN),可以用
CONCATENATE结合IF和INDEX来实现,但步骤会繁琐一些,不过主流版本都支持TEXTJOIN了
内容的提问来源于stack exchange,提问作者Jack Longen
相关产品推荐
相关产品推荐

