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

如何使用Excel公式按条件转换行数据?附示例需求

Excel公式实现符合条件表头的多行对应展示

需求说明

现有Excel表格包含name、A、B、C列,当A/B/C列单元格值为yes时,将对应列的表头名称添加到新的Activities列;同一name对应的多个符合条件表头需分多行显示,对应示例如下:

转换前

nameABC
name1yesyesno
name2noyesyes
name3yesnono

转换后

nameActivities
name1A
B
name2B
C
name3A

解决方案

假设原始数据位于A1:D4(表头在第1行,数据从第2行开始),目标结果从F1列开始(F列为name,G列为Activities),分两种Excel版本提供公式:

1. Excel 365/2021(支持动态数组)

这类版本可借助动态数组函数自动生成结果,无需手动下拉填充:

  • F2单元格(生成name列):
=TOROW(IF(SEQUENCE(ROWS(A2:A4))=TRANSPOSE(SEQUENCE(ROWS(A2:A4))),A2:A4,""),,TRUE)

该公式会自动生成每个name,仅在对应组的第一行显示name,后续行留空。

  • G2单元格(生成Activities列):
=TOCOL(IF(B2:D4="yes",B1:D1,""),,TRUE)

该公式会遍历数据区域,提取所有值为yes的对应表头,自动按顺序排列,与F列的name行一一对应。

2. 旧版本Excel(不支持动态数组)

需使用数组公式(输入后按Ctrl+Shift+Enter确认生效),并手动下拉填充:

  • G2单元格(生成Activities列):
=INDEX($B$1:$D$1,SMALL(IF($B$2:$D$4="yes",COLUMN($B$2:$D$4)-COLUMN($B$2)+1),ROW(A1)))

下拉填充直到出现错误值,之后删除错误行即可。

  • F2单元格(生成name列):
=INDEX($A$2:$A$4,SMALL(IF(COUNTIF($G$1:G1,$A$2:$A$4)=0,ROW($A$2:$A$4)-ROW($A$2)+1),1))

同样下拉填充直到出现错误值,删除错误行后即可得到目标格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:43:12