Excel, 在索引函数中匹配数组

Excel, Matching an Array in an index function

提问人:AesusV 提问时间:11/7/2023 最后编辑:AesusV 更新时间:11/9/2023 访问量:90

问:

这里的目标是让反向索引匹配函数根据从过滤器函数生成的结果数组返回列/行标题。

原始数据集 (=RANDARRAY(12,5,1,100,TRUE))Original dataset (=RANDARRAY(12,5,1,100,TRUE))

过滤后的数据集 =FILTER($E$48:$I$59,(($E$47:$I$47>=2019)*($E$47:$I$47<=2021)))Filtered Data Set =FILTER($E$48:$I$59,(($E$47:$I$47>=2019)*($E$47:$I$47<=2021)))

第二张图片中突出显示的列标题是我试图通过将从过滤器函数返回的数组与原始数组进行匹配来动态生成的。

我以为索引函数可能会起作用,可能在匹配函数中使用额外的索引来处理我尝试搜索的 2D 数组,但我无法让它起作用。

我还尝试了一个 iferror find 函数,该函数(通过溢出)为预期列返回 1,但我正在努力使用它来将其识别为列“2019”,而无需使用辅助列(我试图避免)。

IFERROR(查找())IFERROR(FIND())

这是我想要实现的目标的更清晰的图像。 从原始数据表中查找年份标题,使用通过“filer()”函数生成的一维数组来匹配正确的列。 这个 IndexMatch 公式当然不起作用,但这是第一次尝试并说明了目标。Clearer Image of what I'm trying to do

如果有人能提供一些方向、建议或指导,我将不胜感激。

谢谢

数组 excel 筛选器 索引匹配

评论

0赞 Harun24hr 11/7/2023
您当前的公式应该符合您的期望。您从哪些数据中获取 ,& ?FILTER()201920202021
0赞 AesusV 11/7/2023
很抱歉,如果那里的图片/我的解释不清楚,以黄色突出显示的 2019 年、2020 年和 2021 年是我希望看到的值,基于每个相应标题下方列中的值,与原始数据表匹配。Filter() 函数确实已经按预期工作,但我希望溢出的数组具有标题来标记每列的来源。那里以黄色突出显示的标题是我手动添加的,以说明我希望实现的结果。
0赞 user11222393 11/7/2023
在包含标题时过滤列会不会有问题?=FILTER($E$47:$I$59,(($E$47:$I$47>=2019)*($E$47:$I$47<=2021))) 或使用相同的条件分别过滤标题 =FILTER($E$47:$I$47,(($E$47:$I$47>=2019)*($E$47:$I$47<=2021))) ?
1赞 P.b 11/8/2023
那么你的公式应该可以工作了。它们不是日期值的年份表示吗?在这种情况下,请注意结束日期为下一年,并且小于。=FILTER($E$48:$I$59,(($E$47:$I$47>=date(2019,1,1)*($E$47:$I$47<date(2022,1,1))))
1赞 P.b 11/9/2023
我想我现在明白你的意思了。您不希望在原始公式中包含标题,因为下一个公式引用了它,但您希望动态填充标题。我认为更好的选择是将公式向上移动一个单元格并按照 user11222393 的建议包含标题,并且在下一个公式中不引用而不是引用 .否则,首先解释将标题包含在过滤器中的目的。DROP(E61#,1)E62#

答:

1赞 VBasic2008 11/7/2023 #1

在标题之间选择列

=LET(data,E47:I59,start,2019,end,2021,
    h,TAKE(data,1),
FILTER(data,(h>=start)*(h<=end)))

enter image description here

  • 我不确定是什么让我这样做。
=LET(data,E47:I59,start,2019,end,2021,
    h,TAKE(data,1),
    ms,XMATCH(start,h),
    me,XMATCH(end,h)+1,
CHOOSECOLS(data,SEQUENCE(,me-ms,ms)))
0赞 P.b 11/9/2023 #2

如果我正确理解了这个问题,您正在尝试查找数组公式列中的值,以完全匹配主数据中的列。

正如评论所评论的,我的建议是简单地将标题包含在过滤器中,当您需要引用不包括标题的数组编号时,请使用 so 第一行被删除。DROP(array,1)

但要回答你的问题:

您可以使用 BYROW/MMULT 通过匹配列中的所有单个值来匹配:

=BYCOL(E62#,LAMBDA(c,FILTER(E47:I47,MMULT(SEQUENCE(,ROWS(c),,0),N(c=E48:I59))=12)))

enter image description here

或者使用双 BYCOL/TEXTJOIN:

=LET(y,  E47:I47,
     cy, BYCOL(E48:I59,LAMBDA(c,TEXTJOIN(",",,c))),
BYCOL(E62#,LAMBDA(c,INDEX(y,XMATCH(TEXTJOIN(",",,c),cy)))))

enter image description here