我有一张带有两张纸的Excel文件。在“工作表1”中,我将数据格式化为表格。它有三列:
MyData[Name] MyData[Month] MyData[sales]
在“工作表2”中,我想从MyData
中选择符合条件的多个项目(MyData[Name]
= John
)。
我发现这个很棒的video解释了如何做到这一点,使用了一个结合了INDEX,SMALL,ROWS和IF的数组公式。问题是在视频中他们使用带有硬编码行号的常规范围。
有没有办法进行此选择,但是使用列名而不是硬编码范围?
答案 0 :(得分: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输入第二张,然后向下复制,直到没有返回任何值。
答案 1 :(得分:1)
在构建公式时,通常不需要带有点的所有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))), "")
这会使用AGGREGATE¹ function形式的SMALL强制对任何不匹配的行执行错误,然后在检索多个匹配项时忽略错误。
¹ Excel 2010引入了AGGREGATE function。在以前的版本中不可用。