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

求助: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)<>"")
)
  • 公式细节说明:
    1. LET定义变量,简化后续重复调用的逻辑;
    2. FILTER分别提取出无父项的主类别和有父项的子类别;
    3. REDUCE+VSTACK循环将每个主类别和对应的子类别堆叠在一起;
    4. REPT(" ",1)生成3个空格的缩进(也可以改成REPT(CHAR(9),1)用制表符缩进,视觉上更规整);
    5. 最后用FILTER过滤掉空行,得到干净的最终结果。

场景2:旧版Excel(不支持动态数组)

需要逐行手动填充数组公式,步骤如下:

  1. 提取主类别:在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),"")
  1. 提取子类别并缩进:比如主类别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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:28:44