[英]Java POI: How to find an Excel cell with a string value and get its position (row) to use that position to find another cell
[英]Excel, To find a cell based on its value then find another cell starting the search from the previously found cell position
我有一个巨大的Excel工作表,我需要从中提取一些数据...
为了简化我到底想做什么,我将提供一个简单的示例...
现在让我解释一下这是什么以及我要实现的目标...
在图像中,左侧第一个表格包含以下内容:
B1 / B2 / B3分别代表1号楼,2号楼和3号楼。每个建筑物包含3层,F1 / F2 / F3每个层都有3个正在进行的不同任务,T1 / T2 / T3每个任务的前面都有两个值V1 / V2,分别是任务的计划进度和实际进度。
在右表中,我想从左表中提取所有建筑物和所有楼层的任务1(T1)的所有值...
首先想到的是通过将右表上的每个单元格与其左表上的核心单元链接来进行手动提取,但是,对于数百个建筑物,20层或30层以及第10项任务,这种手动提取似乎需要一个月的工作。 。
另一种方法是通过找到每个任务并将其数据提取到新表中来自动执行此操作,但是这里存在很大的问题...
每个相似的任务都被命名为相同的任务,因此在我们的示例中有9个T1和9个T2和9个T3。 地板也一样,每个地板有三个...
唯一与众不同的是B1 / B2 / B3楼
所以我的问题是,(解释我的想法):
有没有一种方法可以让我们在示例B2(位于2号楼)中进行搜索,一旦找到,它就会从该位置(A14)开始另一个搜索,然后向下寻找F2的“第一次出现”位于2楼)(因此它也没有找到3号楼的F2),一旦找到它,便从此B2 / F2位置(A19)开始新搜索,然后向下查找T1的“首次出现”是任务1),然后找到它,提取它前面的数字(说一个在第二个值V2下的数字),并将其放在右边的表中,该表是B2中V2下的任务1表(T1)。 F2的前面。
如何实现这一目标?在我们的示例中,公式是什么,或者在M5中应该是什么才能完成这项工作? 如果甚至可以通过其他方式实现!
最好的问候,谢谢您的帮助。
M5的公式将是(使用ctrl + 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))
在比较第二个IF
使用“ 14”,它将把A
列中的所有值作为一个数组返回,但前14行除外(在数组中为FALSE
。 然后,第二个MATCH
可以在该数组中找到“ F2”的第一个实例(19)。 现在的公式是:
=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
的列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.