我正在尝试使用特定条件将主表中的数据填充到多个其他表中。
例如,如果用户输入了“过渡计划”的标准,则所有相应的行都会反映到标准选项卡中。
请参阅下面的截图
屏幕截图 1 屏幕截图 2 我使用了索引匹配,但它一遍又一遍地重复找到符合相同条件的值。
请告诉我我做错了什么?主列表是我从中提取这些数据的地方
=IFERROR(INDEX('主列表'!$B:$S,MATCH("过渡倡议",'主列表'!$F:$F,0),5),"")
- 这是在我的 G 列中输入的,仅供参考,因为我只想填充符合此标准的相关数据
其他条件的填充字段使用此公式
=IFERROR(INDEX('主列表'!$B:$S,MATCH($G3,'主列表'!$F:$F,0),4),"")
请帮忙!
答案1
使用 AGGREGATE 检索第一、第二、第三等匹配项。
'to get all of the 'Transition Initiative' listed in column F
=iferror(index('Master List'!f:f, aggregate(15, 7, row($1:$999)/('Master List'!$f:$f="Transition Initiative"), row(1:1))), "")
'to get associated data from column E using G3 and subsequent rows
=if(g3="", "", iferror(index('Master List'!b:m, aggregate(15, 7, row($1:$999)/('Master List'!$f:$f=g3), row(1:1)), 4), ""))
如果主列表行数超过 999,请row($1:$999)
进行更改。
顺便说一句,除了公式之外,还有其他更有效的方法。我立即想到了自动筛选和高级筛选。SQL 查询是另一种方法。VBA 可以使该过程自动化。
答案2
由于您尝试提取多行,因此可以使用 ARRAY(CSE)公式解决您的问题。
怎么运行的:
- 将条件放入单元格中
F70
。
不要使用条件,最好使用单元格引用作为条件,使公式动态化。
单元格中
F73
用于提取相关数据的公式:{=IFERROR(INDEX(MasterList!$A$73:$D$79, SMALL(IF(COUNTIF(MasterList!$F$70,MasterList!$D$73:$D$79), ROW(MasterList!$A$73:$D$79)-MIN(ROW(MasterList!$A$73:$D$79))+1), ROW(A1)), COLUMN(A1)),"")}
单元格中的公式K73
仅用于提取活动:
{=IFERROR(INDEX(MasterList!$D$73:$D$79, SMALL(IF(COUNTIF(MasterList!$F$70,MasterList!$D$73:$D$79), ROW(MasterList!$D$73:$D$79)-MIN(ROW(MasterList!$D$73:$D$79))+1), ROW(A1)), COLUMN(A1)),"")}
INDEX & SMALL
使用行号组合返回值。
{1, False, False, 4, False, False, 7}
其中第 1、4 和 7 行包含匹配的数据。
COUNTIF
,将条件数组与行号进行匹配。
({1, 0, 0, 4, 0, 0, 7}, 1, 2, 3, 4, 5, 6,7)
第一部分显示匹配值的位置,第二部分显示总行数。
注意:
完成两个公式Ctrl+Shift+Enter,然后填充。
根据需要调整公式中的单元格引用和工作表名称。