【问题标题】:Return multiple items from a table从表中返回多个项目
【发布时间】:2015-09-20 11:31:53
【问题描述】:

我有一个带有两张纸的 Excel 文件。在“表 1”中,我有格式化为表格的数据。它有三列:

MyData[Name]         MyData[Month]         MyData[sales]

在“表 2”上,我想从 MyData 中选择多个符合条件的项目(即 MyData[Name] = John)。

我发现这个很棒的video 解释了如何做到这一点,它使用一个结合了 INDEX、SMALL、ROWS 和 IF 的数组公式。问题是在视频中他们使用带有硬编码行号的常规范围。

有没有办法进行此选择,但使用列名而不是硬编码范围?

【问题讨论】:

  • 您的数据样本是什么样的?举一个你尝试过的例子

标签: excel if-statement excel-formula array-formulas structured-references


【解决方案1】:

是的,虽然我不确定是否使用结构化引用进行相对引用,因此请提供两个数组公式,假设您的选择标准(例如 John)在第二张表的 A1 中:

在B1:

=IF(ROWS(A$1:A1)<=COUNTIF(MyData[[#All],[Name]],$A$1),INDEX(MyData[[#All],[Month]],SMALL(IF(MyData[[#All],[Name]]=$A$1,ROW(MyData[[#All],[Name]])-ROW(MyData[[#Headers],[Name]])+1),ROWS(B$1:B1))),"")  

在 C1 中:

 =IF(ROWS(B$1:B1)<=COUNTIF(MyData[[#All],[Name]],$A$1),INDEX(MyData[[#All],[sales]],SMALL(IF(MyData[[#All],[Name]]=$A$1,ROW(MyData[[#All],[Name]])-ROW(MyData[[#Headers],[Name]])+1),ROWS(C$1:C1))),"")  

使用 Ctrl+Shift+Enter 在第二张表中输入并向下复制直到没有返回值。

【讨论】:

    【解决方案2】:

    在您构建公式时,您通常不需要所有 structured table references 附带的指向和选择表格对象。与宏记录器生成的冗长代码非常相似,自动生成的表范围引用旨在处理各种情况,有些部分可能不是必需的或不需要的。

            

    G4:H4 中的标准公式是,

    =IFERROR(INDEX(MyData[Month], AGGREGATE(15, 6, ROW(MyData)-ROW(MyData[#Headers])/(MyData[Name]=$F$4), ROW(1:1))), "")
    =IFERROR(INDEX(MyData[Sales], AGGREGATE(15, 6, ROW(MyData)-ROW(MyData[#Headers])/(MyData[Name]=$F$4), ROW(1:1))), "")
    

    这使用SMALL 表单中的AGGREGATE¹ function 在任何不匹配的行上强制出错,然后在检索多个匹配项时忽略错误。

    ¹AGGREGATE function 是在 Excel 2010 中引入的。它在以前的版本中不可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多