我有一张巨大的excel表,我需要从...中提取一些数据。
为了简化我想要做的事情,我将提供一个简单的例子......
现在请允许我解释一下这是什么以及我想要实现的目标......
在图像中,左边的第一个表包含以下内容:
B1 / B2 / B3代表1号楼,2号楼和3号楼 每栋建筑共有3层,F1 / F2 / F3 每层楼有3个不同的任务正在进行中,T1 / T2 / T3 在每个任务的前面有两个值V1 / V2,分别是计划进度和任务的实际进度。
在右边的表格中,我想从左表中提取所有建筑物和所有楼层的任务1(T1)的所有值...
首先想到的是通过将右表上的每个单元格与左表上的对应单元相连来进行手动提取,但是,对于数百个建筑物和20或30层和10个任务,这个手动提取似乎是一个月工作...
另一种方法是通过查找每个任务并将其数据提取到新表来自动执行此操作,但这里存在一个巨大的问题......
每个相似的任务都被命名为相同,因此在我们的示例中有九个T1和九个T2以及九个T3。同样适用于楼层,每个楼层都有三个......
唯一独特的是建筑物B1 / B2 / B3
所以我的问题是,(解释我的想法):
有没有办法在我们的示例B2(建筑物2)中运行搜索,一旦发现它从这个位置(A14)开始另一次搜索,然后向下寻找'第一次出现' F2(也是2楼)(所以它也没有找到建筑3的F2),一旦找到它,就从这个B2 / F2位置(A19)开始新的搜索,向下寻找'第一次出现' T1(这是任务1),然后当它被发现时,它提取它前面的数字(让我们说第二个值V2下的数字)并将它放在右表中,这是V2下的任务1表(T1)在F2前面的B2。
如何实现这一目标?在我们的示例中,为了完成这项工作,M5中的公式或应该是什么?如果它甚至可能通过某种方式!
感谢您的帮助, 最诚挚的问候。
答案 0 :(得分:0)
M5的公式将是(使用 ctrl + shift + 输入作为数组公式输入):
=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))
在第二个IF
的比较中使用“14”,它将返回列A
中的所有值作为除前14行之外的数组,这将是{{1}在数组中。然后,第二个FALSE
可以在该数组中找到“F2”的第一个实例(19)。公式现在是:
MATCH
重复与之前相同的过程,以获取第19行之后第一个“T1”实例的行。这是馈送到=INDEX($B:$C,MATCH($I$1,IF(ROW($A:$A)>19,$A:$A),0),MATCH(M$3,$B$1:$C$1,0))
的行。最后一个INDEX
为MATCH
提供了专栏。