如何根据条件控制Excel INDEX函数列参数,提取指定行数据?
解决方案
原始数据表格
| A | B | C | D |
|---|---|---|---|
| apple | banana | 0 | 0 |
| boat | 0 | 0 | |
| orange | 0 | 1 | |
| car | lemon | 1 | 1 |
| cat | 0 | 0 | |
| dog | 0 | 0 | |
| goat | 1 | 0 | |
| red | 1 | 1 | |
| blue | green | 0 | 0 |
| lamp | 0 | 0 | |
| garden | 0 | 0 |
问题分析
你原公式的核心问题是:判断A列是否为空时,引用的是公式所在行的A列($A1),而非筛选出来的目标行的A列,导致列参数判断逻辑错误。
方案1:适配旧版Excel的数组公式(需按Ctrl+Shift+Enter输入)
{=IFERROR(IF(INDEX($A$1:$A$11,SMALL(IF(($C$1:$C$11=0)*($D$1:$D$11=0),ROW($A$1:$A$11)-ROW($A$1)+1),ROW(1:1)))<>"",INDEX($A$1:$A$11,SMALL(IF(($C$1:$C$11=0)*($D$1:$D$11=0),ROW($A$1:$A$11)-ROW($A$1)+1),ROW(1:1))),INDEX($B$1:$B$11,SMALL(IF(($C$1:$C$11=0)*($D$1:$D$11=0),ROW($A$1:$A$11)-ROW($A$1)+1),ROW(1:1)))),"")
逻辑说明:
- 用
IF(($C$1:$C$11=0)*($D$1:$D$11=0),ROW(...))筛选出C、D均为0的行号 SMALL(...,ROW(1:1))依次提取符合条件的行(下拉时自动取第2、3...个符合条件的行)- 两次调用
INDEX:先判断目标行的A列是否为空,再决定取A列还是B列的值
方案2:Excel 365/2021 动态数组方案(推荐)
无需按组合键,公式自动溢出所有结果:
=BYROW(FILTER($A$1:$B$11, ($C$1:$C$11=0)*($D$1:$D$11=0)), LAMBDA(row, IF(INDEX(row,1)<>"", INDEX(row,1), INDEX(row,2))))
逻辑说明:
FILTER($A$1:$B$11, ($C$1:$C$11=0)*($D$1:$D$11=0))直接筛选出C、D均为0的A、B列数据BYROW遍历筛选后的每一行,用LAMBDA自定义判断逻辑:若当前行A列非空则取A列,否则取B列
内容的提问来源于stack exchange,提问作者najls
相关产品推荐
相关产品推荐

