如果满足条件,我希望 Excel 工作表中的选项卡引用不同页面中的字段;如果不满足条件,我希望跳过该行,并移动到满足条件的下一行。
我的数据库中存储了被诊断患有癌症(乳腺癌和前列腺癌)的个人。我希望乳腺跟踪页面仅填充被诊断患有乳腺癌的个人(参考“参与者信息”表;D 列)。目前我使用声明IF
来填充此信息,但我的工作表填充了空行,因为这些行是前列腺癌(意味着它们不符合IF
声明标准)。
我找到了这个公式:
{=IFERROR(INDEX('Participant Information'!A:A,SMALL(IF('Participant Information'!$D$2:$D$300="Breast",ROW('Participant Information'!$D$2:$D$300)),ROWS(1:1))),"")}
但我无法理解它是如何工作的。它也无法达到我的目的。
TL;DR:我需要引用单独选项卡上的单元格,当条件不满足时不会出现空白行。我想到了邮件合并中使用的“下一个记录”功能。
答案1
如上所述,所述函数一旦完成就可以完成所需的输出,这里有一个示例数据,它反映了所需的结果:
• 单元格中使用的公式D3
=IFERROR(INDEX('Participant Information'!$B$5:$B$15,
AGGREGATE(15,6,(ROW('Participant Information'!$B$5:$E$15)-ROW('Participant Information'!$B$5)+1)/
('Participant Information'!$E$5:$E$15=Records!$C$2),ROWS(Records!D$2:D2))),"")
AGGREGATE()
函数用于执行聚合计算,这里它SMALL()
表示15
- 上述函数中的第二个参数
6
表示忽略错误值。 - 第三个参数是一个数组值,其中
(ROW('Participant Information'!$B$5:$E$15)-ROW('Participant Information'!$B$5)+1)
计算所述范围的行号。('Participant Information'!$E$5:$E$15=Records!$C$2)
检查相应的列是否E
与条件匹配,这里它Breast
在单元格中C2
。接下来,通过将返回值除以条件返回来创建一个数组,ROW()
以仅获取满足条件的返回值,即,TRUE
而将不满足条件的其他返回值除以,0
因此返回错误并被忽略。 ROWS(Records!D$2:D2)
返回最小值,INDEX()
函数根据最小值(即行号)返回范围中的名称。IFERROR()
用于在不再检索任何记录时忽略任何错误值。
因此,对于您的工作表来说,
=IFERROR(INDEX('Participant Information'!A$2:A$300,
AGGREGATE(15,6,(ROW('Participant Information'!D$2:D$300)-ROW(D$2)+1)/
('Participant Information'!D$2:D$300="Breast"),ROWS(1:1))),"")
使用FILTER()
它也非常简单和容易:
=FILTER('Participant Information'!A$2:A$300,
'Participant Information'!D$2:D$300="Breast","Not Found")