在没有 VBA 的情况下,有(至少)两种方法可以做到这一点。
使用排序列表
第一个假设是您的数据可以重新排序,因此“未报告”的所有内容都在顶部,而“报告”的所有内容都在其下方(反之亦然)。假设是这种情况(并且似乎已经像这样排序),我们将使用函数 OFFSET 创建一个新范围,该范围仅显示与“未报告”或“已报告”一致的值。
Offset 将给定的引用指向工作表上的某个点,然后向下/向上和向左/向右移动以查看要返回的引用。然后,它返回给定高度和给定宽度的一系列单元格。在这里,我们将要从左上角的 Sheet2 开始,向下移动直到找到“未报告”或“已报告”一词。一旦找到该术语,我们将要向右移动一列(从工作表 2 中拉出 B 列),然后将“高度”设置为与“未报告”或“报告”单元格一样多的行。这将在第 1 页的 A1 中如下所示,复制下来:
=OFFSET(Sheet2!$A$1,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),1)
这表示:首先,从 sheet2 上的单元格 A1 开始。然后在 A1 中找到该术语(“未报告”或“报告”,在 sheet2!A:A 上(我们减去 1,因为偏移量从 A1 开始 - 所以如果您的数据从 A1 开始,我们实际上需要保持在“0”。如果您在 sheet2 上有标题,您将不需要这个 -1)。然后,向右移动 1 列。向下行的次数与 Sheet2 A 列在 Sheet1 A1 中找到的术语一样多。保持 1 列宽。一起,这将在 sheet2 上留下一个范围,显示 B 列的整个长度,A 列与 sheet1 A1 中的术语匹配。
现在我们需要获取该偏移量,并使用它来找出 Sheet1 B1 中的术语何时与 Sheet2 列 B 匹配。这将按如下方式工作:
=MATCH(B1,[FORMULA ABOVE],0)
这显示了向下的行数,从上面创建的特殊 OFFSET 数组开始,B1 中的术语与 sheet2 中的 B 列匹配。要使用此信息从工作表 2 的 C 列中提取结果,我们可以使用 INDEX 函数,如下所示:
=INDEX([FORMULA ABOVE],MATCH(B1,[FORMULA ABOVE],0))
因为这在单个单元格中会相当复杂,我们可以通过使用 VLOOKUP 来简化它,它只需要一次输入 OFFSET 函数。这将按如下方式工作:
=VLOOKUP(B1,[FORMULA ABOVE],2,0)
这采用上面的 OFFSET 公式,在 B1 中找到匹配项,然后移动到第 2 列以获取 sheet2 中 C 列的值。因为我们要使用 VLOOKUP,所以需要调整上面的偏移量公式以提供 2 列数据而不是 1 列。加起来如下所示:
表格 1、C1 和复制下来的最终公式
=VLOOKUP(B1,OFFSET(Sheet2!$A$1,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),2),2,0)
使用数组公式的选项
仅当您的数据已排序以便 REPORTED 和 UNREPORTED 行组合在一起时,上述方法才有效。如果它们无法排序,您可以使用 ARRAY FORMULA,它本质上采用通常适用于单个单元格的公式,并在整个单元格范围内运行它。它返回一个结果数组,必须将其缩减为单个值。一个基本的数组公式如下所示[假设此示例 A1 = 1, A2 = 2...A5 = 5]:
=IF(A1:A5>3,A1:A5,"")
按 CTRL + SHIFT + ENTER 确认此(以及所有数组函数),而不仅仅是 ENTER。这会查看 A1:A5 中的每个单元格,如果值大于 3,则给出该单元格中的数字 - 否则,它返回“”。在这种情况下,结果将是数组 {"";"";"";4;5}。要获得单个总数 9,请将其包装在 SUM 函数中:
=SUM(IF(A1:A5>3,A1:A5,""))
在您的情况下,我们需要使用数组公式来查看 Sheet2 中的哪一行与 Sheet1 中的 A1 和 Sheet1 中的 B1 匹配。这将如下所示:
=IF(Sheet2!$A$1:A$100=A1,IF(Sheet2!$B$1:$B$100,ROW($B$1:$B$100),""),"")
这会检查工作表 2 中 A 列中的哪些行与 A1 匹配。对于那些这样做的,它然后检查表 2 中 B 列中的哪些行与 B1 匹配。对于那些,它从该匹配中提取行号。其他一切都返回“”。假设没有重复,应该只返回 1 个行号。要从结果数组中提取该数字,请将整个内容包装在 MATCH 函数中。现在您有了行号,您可以使用 INDEX 函数将 C 列中的结果与该行一起提取,如下所示:
最终数组公式方法
=INDEX($C$1:$C$100,MAX(IF(Sheet2!$A$1:A$100=A1,IF(Sheet2!$B$1:$B$100,ROW(Sheet2!$B$1:$B$100),""),"")))
当您键入此公式时,请记住使用 CTRL + SHIFT + ENTER 而不是 ENTER 来确认。请注意,我没有引用所有 Sheet2!A:A,因为数组公式在大范围内运行非常缓慢。