提问人:AesusV 提问时间:11/7/2023 最后编辑:AesusV 更新时间:11/9/2023 访问量:90
Excel,匹配索引函数中的数组
Excel, Matching an Array in an index function
问:
这里的目标是让反向索引匹配函数根据从筛选器函数生成的结果数组返回列/行标题。
原始数据集 (=RANDARRAY(12,5,1,100,TRUE))
过滤数据集 =FILTER($E$48:$I$59,(($E$47:$I$47>=2019)*($E$47:$I$47<=2021)))
第二张图片中突出显示的列标题是我试图通过将从过滤器函数返回的数组与原始数组匹配来动态生成的。
我在想索引函数可能会起作用,可能在匹配函数中有一个额外的索引,以便处理我试图搜索的 2D 数组,但我无法让它起作用。
我还尝试了一个 iferror find 函数,它确实(通过溢出)为预期列返回 1,但我正在努力使用它来将其识别为列“2019”,而无需使用帮助列(我试图避免)。
这是我想要实现的目标的更清晰的图像。 从原始数据表中查找年份标题,使用通过“filer()”函数生成的一维数组来匹配正确的列。 这个 IndexMatch 公式当然不起作用,但这是第一次尝试并说明了目标。
如果有人能提供一些方向、建议或指导,我将不胜感激。
谢谢
答:
1赞
VBasic2008
11/7/2023
#1
在标题之间选择列
=LET(data,E47:I59,start,2019,end,2021,
h,TAKE(data,1),
FILTER(data,(h>=start)*(h<=end)))
- 我不确定是什么让我这样做。
=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)))
或者使用双 BYCOL/TEXTJOIN:
=LET(y, E47:I47,
cy, BYCOL(E48:I59,LAMBDA(c,TEXTJOIN(",",,c))),
BYCOL(E62#,LAMBDA(c,INDEX(y,XMATCH(TEXTJOIN(",",,c),cy)))))
评论
FILTER()
2019
2020
2021
=FILTER($E$48:$I$59,(($E$47:$I$47>=date(2019,1,1)*($E$47:$I$47<date(2022,1,1))))
DROP(E61#,1)
E62#