首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在目标范围不在固定位置的情况下创建数组公式

需要在目标范围不在固定位置的情况下创建数组公式
EN

Stack Overflow用户
提问于 2020-11-19 18:55:55
回答 2查看 64关注 0票数 0

目前,我在名为Data的工作表上的连续行中使用以下公式

代码语言:javascript
复制
{=IFERROR(SMALL(IF($Q$2=DMS!$I$1:$I$99999,ROW(DMS!$I$1:$I$99999)-ROW(DMS!$I$1)+1),1),"")}
{=IFERROR(SMALL(IF($Q$2=DMS!$I$1:$I$99999,ROW(DMS!$I$1:$I$99999)-ROW(DMS!$I$1)+1),2),"")}
{=IFERROR(SMALL(IF($Q$2=DMS!$I$1:$I$99999,ROW(DMS!$I$1:$I$99999)-ROW(DMS!$I$1)+1),3),"")}

..。

对于总共30行,以确定工作表DMS列I中与我的工作表“数据”单元格Q2中的值匹配的前30行。

当搜索范围不再是固定位置时,我试图找到一种重新创建上述数组的方法,或者是使用数组的替代解决方案。本质上,第一栏中的内容,我可以在明天和第二天在J栏中,然后在接下来的3天内返回给I。我将能够通过列标题知道它在哪里,所以我确实有一个静态的参照点,即使它不是在一个固定的列中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-19 20:10:26

试试这个公式。它在列A到Z的第一行中查找文本为"TheKey“的列,然后对查找列中的值执行匹配。

在Excel 365中,您只需点击enter,在早期版本中,您需要使用Ctrl+Shift+Enter

代码语言:javascript
复制
=IFERROR(SMALL(IF($Q$2=INDEX(dms!$A$1:$Z$9999,1,MATCH("TheKey",dms!$A$1:$Z$1,0)):INDEX(dms!$A$1:$Z$9999,9999,MATCH("TheKey",dms!$A$1:$Z$1,0)),ROW($A$1:$A$9999)),ROW(A1)),"")

在Excel 365中,通过应用新的Let()函数并重用结果,可以避免匹配函数的重复。如下所示:

代码语言:javascript
复制
=LET(myColumn,MATCH("TheKey",dms!$A$1:$Z$1,0),IFERROR(SMALL(IF($Q$2=INDEX(dms!$A$1:$Z$9999,1,myColumn):INDEX(dms!$A$1:$Z$9999,9999,myColumn),ROW($A$1:$A$9999)),ROW(A1)),""))

我删除了-ROW(DMS!$I$1)+1,因为它没有任何作用,真的。只需减去1,然后再加1。

我还将后续行(1、2、3等)的硬编码数字替换为Row(A1),这将在公式的第一行中计算为1,复制后将变为2、3、4等,而不必调整每一行的公式。

票数 1
EN

Stack Overflow用户

发布于 2020-11-19 20:24:37

您需要组合几个高级功能。首先,您需要定位那个标头,因为它是您唯一的静态点。

您可以使用以下方法定位静态标头:

代码语言:javascript
复制
=CELL("address";INDEX(DMS!$A$1:$M$1;;MATCH("STATIC HEADER";DMS!$A$1:$M$1;0)))

在本例中,它将返回以下文本:[Libro1]DMS!$I$1

这是通往细胞的完整道路。

现在,您需要将该字符串与偏移量组合起来,以获得对该列的引用,并获得大约99999行数据。这里的ISsue偏移量不适用于与活动工作表不同的工作表,因此您需要首先将其与间接工作表结合起来,以获得对工作表DMS中范围的引用。

间接函数 偏移函数

因此,下面这样的公式将返回1列和99999单元格的引用,其中静态标头是:

代码语言:javascript
复制
OFFSET(INDIRECT(CELL("address";INDEX(DMS!$A$1:$M$1;;MATCH("STATIC HEADER";DMS!$A$1:$M$1;0))));0;0;99999;1)

所以现在你可以把所有这些组合成一个非常大的公式:

代码语言:javascript
复制
=IFERROR(SMALL(IF($Q$2=OFFSET(INDIRECT(CELL("address";INDEX(DMS!$A$1:$M$1;;MATCH("STATIC HEADER";DMS!$A$1:$M$1;0))));0;0;99999;1);ROW(OFFSET(INDIRECT(CELL("address";INDEX(DMS!$A$1:$M$1;;MATCH("STATIC HEADER";DMS!$A$1:$M$1;0))));0;0;99999;1)));ROW()-5);"")

注意,我删除了ROW(DMS!$I$1)+1,因为它总是等于0,所以不需要。我在小函数中添加了ROW()-5)部分,这样我就可以向下拖动(我正在第6行进行测试,然后向下拖放。不需要你手动输入的1,2,3)。根据你的需要调整这个部分。

注意,如果STATIC HEADER位于不同的列中,则公式仍然有效。

我上传了一个文件,如果您想知道它是如何工作的,请执行我的Gdrive,因为复制这么多函数可能会很疯狂。

Hu1TKLXhTUGVq8tN67eHQKtVb/view?usp=共享

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64918211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档