求助:Google Sheets分层类别/子类别显示公式实现
解决方案:分Excel版本实现层级缩进列表
先明确你的数据源(假设存在Sheet1中,表头在第1行,数据行是2-5行),目标是在另一工作表(比如Sheet2)生成带缩进的层级结构,以下分两种场景给出公式:
场景1:使用Excel 365/2021(支持动态数组函数)
这种情况可以一键生成完整列表,无需逐行拖拽,直接在Sheet2的A2单元格输入以下公式(B列会自动匹配对应数值):
=LET( 主类别数据, FILTER(Sheet1!$A$2:$C$5, Sheet1!$B$2:$B$5=""), 子类别数据, FILTER(Sheet1!$A$2:$C$5, Sheet1!$B$2:$B$5<>"", ""), 组合结果, REDUCE("", 主类别数据, LAMBDA(累计结果, 当前主项, VSTACK(累计结果, 当前主项, IFERROR(REPT(" ",1)&INDEX(子类别数据, FILTER(ROW(子类别数据)-ROW(子类别数据)+1, INDEX(子类别数据,,2)=INDEX(current,,1)), {1,3}), "") ) )), FILTER(组合结果, INDEX(组合结果,,1)<>"") )
- 公式细节说明:
LET定义变量,简化后续重复调用的逻辑;FILTER分别提取出无父项的主类别和有父项的子类别;REDUCE+VSTACK循环将每个主类别和对应的子类别堆叠在一起;REPT(" ",1)生成3个空格的缩进(也可以改成REPT(CHAR(9),1)用制表符缩进,视觉上更规整);- 最后用
FILTER过滤掉空行,得到干净的最终结果。
场景2:旧版Excel(不支持动态数组)
需要逐行手动填充数组公式,步骤如下:
- 提取主类别:在
Sheet2的A2单元格输入以下数组公式(必须按Ctrl+Shift+Enter确认输入,不能直接回车),然后向下拖拽到出现空值为止:
=IFERROR(INDEX(Sheet1!$A$2:$A$5,SMALL(IF(Sheet1!$B$2:$B$5="",ROW(Sheet1!$A$2:$A$5)-ROW(Sheet1!$A$2)+1),ROW(A1))),"")
对应的B2单元格输入匹配数值的公式:
=IFERROR(VLOOKUP(A2,Sheet1!$A$2:$C$5,3,FALSE),"")
- 提取子类别并缩进:比如主类别
Fur在Sheet2!A2,在A4单元格输入以下数组公式(同样按Ctrl+Shift+Enter),向下拖拽:
=IFERROR(REPT(" ",1)&INDEX(Sheet1!$A$2:$A$5,SMALL(IF(Sheet1!$B$2:$B$5=Sheet2!$A$2,ROW(Sheet1!$A$2:$A$5)-ROW(Sheet1!$A$2)+1),ROW(A1))),"")
对应的B4单元格用以下公式匹配数值(去掉缩进空格才能正确匹配数据源):
=IFERROR(VLOOKUP(SUBSTITUTE(A4," ",""),Sheet1!$A$2:$C$5,3,FALSE),"")
补充提示
- 如果需要多级缩进(比如存在子子类别),只需调整
REPT的第二个参数即可,比如REPT(" ",2)实现二级缩进; - 所有公式中的数据源范围(比如
Sheet1!$A$2:$C$5)请根据你的实际数据行数调整。
内容的提问来源于stack exchange,提问作者Chris Y
相关产品推荐
相关产品推荐

