我正在尝试在单独的表数组中查找部件号,同一值可能在多行中。该公式应在另一个表中找到该值的每个实例,移至日期列,并确定该值存在于哪个月份中以及它属于哪一行。整个表B3:F15应该是自动化的。我已附上一张图片,以尽可能地解释我要完成的工作。
公式将输入到B3:F15中。这些是数据将被放入的单元格。每行将在A列中搜索其相应的部件号。即B3至F3仅在查找A3数据。这些行用于确定L2:P4中的部件号是否与列A中的行值匹配,以及是否在属于月份B2:F2的月份中使用。如果在相应月份使用了部件号,则它将从列I输出工厂编号。在某些情况下,L2:P4中的部件号可以存在于多行中,但它们对于每一列都是唯一的。
作为示例,我手动填写了PN1001和PN1021的数据。对于PN1001,它属于B3:F3。 B3:F3中的每个单元格都将搜索数组L2:P4并意识到只能在M4中找到一次,因此它将查看其行J4和K4中的日期,并确定其使用的月份。在1月,2月和3月使用,它将把Plant#输出到D3,E3,F3。在PN1021的示例中是相同的,但是在这种情况下PN1021存在于L2和L4中,因此它将采用J2,K2和J4,K4的日期。
某些零件号可以是字母和数字的组合,有些可能只是数字。
关于如何构建公式,我不确定应该使用索引/匹配/查找的哪种组合。我的理论是B3:F15中的每个单元格都会包含= MATCH(Lookup(columnA with L3:P4))的公式(但是如何查找多个实例?)。一些研究使我使用了这个概念查找多个实例并指向行#。
SMALL(IF(查找范围=查找值,行(查找范围),行()-查找范围起始行下方的行数)]
一旦找到每个实例,然后对行进行索引并比较B3中的单元格是否大于J3且小于K3,以确定应该输入值的月份。如果是,则从行号输出I列。
如果您有更好的解决方案或想法来执行此操作,请提供反馈。预先感谢您的支持。
我认为以下公式可以满足您的需求。我发现根据I1:P4
数据创建了一个表,并使用了结构化引用,因为它更易于理解。
B3: =IFERROR(
INDEX(partsTbl,
AGGREGATE(14,6,
($A3=partsTbl)*
(B$2>DATE(YEAR(partsTbl[[Test Start Date]:[Test Start Date]]),MONTH(partsTbl[[Test Start Date]:[Test Start Date]]),0))*
(B$2<DATE(YEAR(partsTbl[[Test Finish Date]:[Test Finish Date]]),MONTH(partsTbl[[Test Finish Date]:[Test Finish Date]])+1,1))*
ROW(partsTbl)-ROW(partsTbl[#Headers]),1),
1),
"")
$A3=partsTbl
返回2D数组以在表中找到零件号partsTbl
中的开始/完成日期并不总是在月初/月末,因此我们需要先将其转换为这样的日期,然后再比较B2:F2
中的日期(B$2>DATE(YEAR(partsTbl[[Test Start Date]:[Test Start Date]]),MONTH(partsTbl[[Test Start Date]:[Test Start Date]]),0))
{FALSE,FALSE,TRUE,FALSE...}
的二维数组,其中TRUE
匹配按日期过滤的零件号。