数组查找多列并获取另一列信息
Array to lookup multiple columns and take another columns information
我正在尝试在单独的 table 数组中查找部件号,相同的值可能在多行中。该公式应在另一个 table 中找到该值的每个实例,移动到日期列并确定该值存在于哪个月份以及它属于哪一行。整个 table B3:F15 应该是自动化的。如果可能的话,我附上了一张图片,其中正确解释了我要完成的工作。
公式将输入 B3:F15。这些是数据将被拉入的单元格。每行将在 A 列中搜索其对应的 Part Number。即 B3 至 F3 仅查找 A3 数据。这些行用于确定 L2:P4 中的零件号是否与 A 列中的行值匹配,以及是否在属于月份 B2:F2 的那个月中使用过。如果在相应的月份使用了部件号,那么它将从 I 列输出工厂编号。在某些情况下,L2:P4 中的部件号可以存在于多行中,但它们对于每一列都是唯一的。
例如,我手动填写了 PN1001 和 PN1021 的数据。对于 PN1001,这属于 B3:F3。 B3:F3 中的每个单元格将搜索数组 L2:P4 并意识到它只在 M4 中找到一次,因此它将查看其行 J4 和 K4 中的日期,并确定它被使用的月份in. 由于在Jan、Feb、Mar使用过,所以会把Plant#输出到D3、E3、F3中。在 PN1021 的示例中,它是相同的,但在这种情况下,PN1021 存在于 L2 和 L4 中,因此它将采用 J2,K2 和 J4,K4 的日期。
有些部件号可以是字母和数字的组合,有些可能只是数字。
关于如何构建公式,我不确定应该使用 Index/Match/Lookup 的哪种组合。我的理论是 B3:F15 中的每个单元格都包含一个公式 =MATCH(Lookup(columnA with L3:P4)) (但是你如何让它查找多个实例??)一些研究引导我使用此概念查找多个实例并指向行#。
SMALL(IF(Lookup Range = Lookup Value, Row(Lookup Range),Row ()-# of rows below the start row of Lookup Range)
一旦我找到每个实例,然后索引该行并比较 B3 中的单元格是否大于 J3 和小于 K3 以确定应该输入值的月份。如果是,则根据行号输出第 I 列。
如果您有任何更好的解决方案或想法来执行此操作,请提供反馈。在此先感谢您的支持。
我认为下面的公式可以满足您的需求。我根据您的 I1:P4
数据创建了一个 table,并使用了结构化引用,因为我发现它更容易理解。
B3: =IFERROR(
INDEX(partsTbl,
MAX(
($A3=partsTbl)*
(B>DATE(YEAR(partsTbl[[Test Start Date]:[Test Start Date]]),MONTH(partsTbl[[Test Start Date]:[Test Start Date]]),0))*
(B<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),
"")
$A3=partsTbl
return 类似于 {FALSE,FALSE,TRUE,FALSE;FALSE,FALSE, …}
的二维数组,用于在 table 中查找部件号
- 由于您在
partsTbl
中的 start/finish 日期并不总是在该月的 beginning/end,我们需要在比较 [=15] 中的日期之前将它们转换为这样的日期=]
(B>DATE(YEAR(partsTbl[[Test Start Date]:[Test Start Date]]),MONTH(partsTbl[[Test Start Date]:[Test Start Date]]),0))
- 月底也差不多。
- 我们现在有一个
{FALSE,FALSE,TRUE,FALSE...}
的二维数组,其中 TRUE
与按日期过滤的零件号匹配。
- ROW(partsTbl) returns 是 table 中行号的匹配数组(我们减去 Header 行的行号来确定数据中的行).
- 当我们进行乘法运算时,我们会得到一个数组,其中最大值将是所需的行
INDEX
,引用第 1 列,然后 return 适当的植物 #
我正在尝试在单独的 table 数组中查找部件号,相同的值可能在多行中。该公式应在另一个 table 中找到该值的每个实例,移动到日期列并确定该值存在于哪个月份以及它属于哪一行。整个 table B3:F15 应该是自动化的。如果可能的话,我附上了一张图片,其中正确解释了我要完成的工作。
公式将输入 B3:F15。这些是数据将被拉入的单元格。每行将在 A 列中搜索其对应的 Part Number。即 B3 至 F3 仅查找 A3 数据。这些行用于确定 L2:P4 中的零件号是否与 A 列中的行值匹配,以及是否在属于月份 B2:F2 的那个月中使用过。如果在相应的月份使用了部件号,那么它将从 I 列输出工厂编号。在某些情况下,L2:P4 中的部件号可以存在于多行中,但它们对于每一列都是唯一的。
例如,我手动填写了 PN1001 和 PN1021 的数据。对于 PN1001,这属于 B3:F3。 B3:F3 中的每个单元格将搜索数组 L2:P4 并意识到它只在 M4 中找到一次,因此它将查看其行 J4 和 K4 中的日期,并确定它被使用的月份in. 由于在Jan、Feb、Mar使用过,所以会把Plant#输出到D3、E3、F3中。在 PN1021 的示例中,它是相同的,但在这种情况下,PN1021 存在于 L2 和 L4 中,因此它将采用 J2,K2 和 J4,K4 的日期。
有些部件号可以是字母和数字的组合,有些可能只是数字。
关于如何构建公式,我不确定应该使用 Index/Match/Lookup 的哪种组合。我的理论是 B3:F15 中的每个单元格都包含一个公式 =MATCH(Lookup(columnA with L3:P4)) (但是你如何让它查找多个实例??)一些研究引导我使用此概念查找多个实例并指向行#。
SMALL(IF(Lookup Range = Lookup Value, Row(Lookup Range),Row ()-# of rows below the start row of Lookup Range)
一旦我找到每个实例,然后索引该行并比较 B3 中的单元格是否大于 J3 和小于 K3 以确定应该输入值的月份。如果是,则根据行号输出第 I 列。
如果您有任何更好的解决方案或想法来执行此操作,请提供反馈。在此先感谢您的支持。
我认为下面的公式可以满足您的需求。我根据您的 I1:P4
数据创建了一个 table,并使用了结构化引用,因为我发现它更容易理解。
B3: =IFERROR(
INDEX(partsTbl,
MAX(
($A3=partsTbl)*
(B>DATE(YEAR(partsTbl[[Test Start Date]:[Test Start Date]]),MONTH(partsTbl[[Test Start Date]:[Test Start Date]]),0))*
(B<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),
"")
$A3=partsTbl
return 类似于{FALSE,FALSE,TRUE,FALSE;FALSE,FALSE, …}
的二维数组,用于在 table 中查找部件号
- 由于您在
partsTbl
中的 start/finish 日期并不总是在该月的 beginning/end,我们需要在比较 [=15] 中的日期之前将它们转换为这样的日期=](B>DATE(YEAR(partsTbl[[Test Start Date]:[Test Start Date]]),MONTH(partsTbl[[Test Start Date]:[Test Start Date]]),0))
- 月底也差不多。
- 我们现在有一个
{FALSE,FALSE,TRUE,FALSE...}
的二维数组,其中TRUE
与按日期过滤的零件号匹配。 - ROW(partsTbl) returns 是 table 中行号的匹配数组(我们减去 Header 行的行号来确定数据中的行).
- 当我们进行乘法运算时,我们会得到一个数组,其中最大值将是所需的行
INDEX
,引用第 1 列,然后 return 适当的植物 #