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

gblwokeq  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(156)

这里的目标是让一个反向索引匹配函数返回基于过滤器函数生成的结果数组的列/行标题。
原始数据集(=RANDARRAY(12,5,1,100,TRUE))x1c 0d1x
过滤数据集=FILTER($E$48:$I$59,(($E$47:$I$47>=2019)*($E$47:$I$47<=2021)

第二张图片中突出显示的列标题是我试图通过将从filter函数返回的数组与原始数组进行匹配来动态生成的。
我在想一个Index函数可能会起作用,可能在match函数中有一个额外的索引,以便处理我试图搜索的2D数组,但我无法让它工作。
我还尝试了一个iferror find函数,它确实(通过spill)为预期的列返回1,但我正在努力解决如何使用它来将其识别为列“2019”,而不使用辅助列(我试图避免)。
IFERROR(FIND())

下面是我尝试实现的一个更清晰的图像。从原始数据表中查找年份标题,使用通过'filer()'函数生成的1D数组来匹配正确的列。这个IndexMatch公式当然不起作用,但它是第一次尝试,并说明了目标。

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

j1dl9f46

j1dl9f461#

选择标题之间的列

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

字符串


的数据

  • 我不知道是什么让我这么做的。
  1. =LET(data,E47:I59,start,2019,end,2021,
  2. h,TAKE(data,1),
  3. ms,XMATCH(start,h),
  4. me,XMATCH(end,h)+1,
  5. CHOOSECOLS(data,SEQUENCE(,me-ms,ms)))

展开查看全部
l2osamch

l2osamch2#

如果我对这个问题的理解是正确的,那么你是在尝试查找数组公式的列中的值,以完全匹配主数据中的列。
正如我所评论的,我的建议是简单地在过滤器中包含标题,当你需要引用数组中不包括标题的数字时,使用DROP(array,1),这样第一行就被删除了。
但我想回答你的问题
您可以使用BYROW/MMROW通过匹配要匹配的列中的所有单个值来完成此操作:

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

字符串
x1c 0d1x的数据
或者使用双BYCOL/TEXTJOIN:

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


展开查看全部

相关问题