首页 > 解决方案 > Excel,要根据其值查找一个单元格,然后从先前找到的单元格位置开始搜索另一个单元格

问题描述

我有一个巨大的 Excel 表,我需要从中提取一些数据...

为了简化我想要做的事情,我将提供一个简单的例子......

示例 Excel 工作表

现在请允许我解释一下这是什么以及我想要实现的目标......

在图像中,左侧的第一个表格包含以下内容:

B1/B2/B3 代表Building 1, 2 and 3 每栋楼包含3层,F1/F2/F3 每层有3个不同的任务在进行中,T1/T2/T3 每个任务前面有两个值V1/V2分别是任务的计划进度和实际进度。

在右表上,我想从左表中提取所有建筑物和所有楼层的任务 1 (T1) 的所有值...

第一个想法是通过将右表上的每个单元格与其左表上的对应对象链接来进行手动提取,但是,对于数百座建筑物、第 20 或第 30 层和第 10 项任务,这种手动提取似乎需要一个月的工作。 .

另一种方法是通过查找每个任务并将其数据提取到新表来自动执行此操作,但是这里有一个巨大的问题......

每个类似的任务都命名相同,因此在我们的示例中有九个 T1、九个 T2 和九个 T3。楼层也是如此,每层有三个......

唯一独特的是建筑物 B1/B2/B3

所以我的问题是,(解释我的想法):

有没有办法在我们的示例 B2(即 Building 2)中运行搜索,一旦找到它,它就会从该位置(A14)开始另一个搜索并向下寻找 F2 的“第一次唯一出现”(其中是 2 楼)(因此它也没有找到 3 号楼的 F2),一旦找到它,它就会从这个 B2/F2 位置 (A19) 开始新的搜索,然后向下寻找 T1 的“第一次唯一出现”(其中是任务 1),然后当它被发现时,它提取它前面的数字(假设是第二个值 V2 下的那个)并将其放在右表中,即 V2 下 B2 的任务 1 表(T1)中F2前面。

如何实现这一点?在我们的示例中,M5 中应该使用什么公式或任何内容来完成这项工作?如果通过某种方式甚至可能!

提前感谢您的帮助,最好的问候。

标签: excel

解决方案


ctrlM5 的公式将是(使用+ shift+作为数组公式输入enter):

=INDEX($B:$C,MATCH($I$1,IF(ROW($A:$A)>MATCH($I5,IF(ROW($A:$A)>MATCH(IF(M$2="",L$2,M$2),$A:$A,0),$A:$A),0),$A:$A),0),MATCH(M$3,$B$1:$C$1,0))

可以将其复制以填写表格的其余部分。

编辑您可以通过将其限制在特定范围而不是整列来使其更快:

=INDEX($B$1:$C$39,MATCH($I$1,IF(ROW($A$1:$A$39)>MATCH($I5,IF(ROW($A$1:$A$39)>MATCH(IF(M$2="",L$2,M$2),$A$1:$A$39,0),$A$1:$A$39),0),$A$1:$A$39),0),MATCH(M$3,$B$1:$C$1,0))

EDIT2:嵌套MATCH公式的快速解释:从第三个MATCH,开始MATCH(IF(M$2="",L$2,M$2),$A:$A,0)。这会在 A 列中找到包含“B2”(14) 的行,因此公式变为。

=INDEX($B:$C,MATCH($I$1,IF(ROW($A:$A)>MATCH($I5,IF(ROW($A:$A)>14,$A:$A),0),$A:$A),0),MATCH(M$3,$B$1:$C$1,0))

“14”用于第二个的比较IF,它将A以数组形式返回列中的所有值,但前 14 行除外,这些值将FALSE在数组中。然后第二个MATCH可以在该数组 (19) 中找到“F2”的第一个实例。现在的公式是:

=INDEX($B:$C,MATCH($I$1,IF(ROW($A:$A)>19,$A:$A),0),MATCH(M$3,$B$1:$C$1,0))

重复与之前相同的过程,在第 19 行之后获取“T1”的第一个实例的行。这是馈送到 的行INDEX。最后一个MATCH给出 的列INDEX


推荐阅读