如何使用Excel公式按条件转换行数据?附示例需求
Excel公式实现符合条件表头的多行对应展示
需求说明
现有Excel表格包含name、A、B、C列,当A/B/C列单元格值为yes时,将对应列的表头名称添加到新的Activities列;同一name对应的多个符合条件表头需分多行显示,对应示例如下:
转换前
| name | A | B | C |
|---|---|---|---|
| name1 | yes | yes | no |
| name2 | no | yes | yes |
| name3 | yes | no | no |
转换后
| name | Activities |
|---|---|
| name1 | A |
| B | |
| name2 | B |
| C | |
| name3 | A |
解决方案
假设原始数据位于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
相关产品推荐
相关产品推荐

