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

如何根据条件控制Excel INDEX函数列参数,提取指定行数据?

解决方案

原始数据表格

ABCD
applebanana00
boat00
orange01
carlemon11
cat00
dog00
goat10
red11
bluegreen00
lamp00
garden00

问题分析

你原公式的核心问题是:判断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)))),"")

逻辑说明:

  1. 用IF(($C$1:$C$11=0)*($D$1:$D$11=0),ROW(...))筛选出C、D均为0的行号
  2. SMALL(...,ROW(1:1))依次提取符合条件的行(下拉时自动取第2、3...个符合条件的行)
  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))))

逻辑说明:

  1. FILTER($A$1:$B$11, ($C$1:$C$11=0)*($D$1:$D$11=0))直接筛选出C、D均为0的A、B列数据
  2. BYROW遍历筛选后的每一行,用LAMBDA自定义判断逻辑:若当前行A列非空则取A列,否则取B列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:06:09