excel 查找多个匹配行,然后返回匹配的子行

5ssjco0h  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(118)

所以我有以下设置。
2023
x1c 0d1x的数据
2023-raw



在2023年的工作表中,我现在想用我在那个特定日期的工作时间填充单元格。我的思维方式和尝试创建一个Excel公式如下:
1.如果匹配周(vecka)存在于2023-raw。
1.然后检查2023工作表中的当前列名是否存在于先前匹配的行中。
1.以步骤2中的返回值为基础进行计算。
所以基本上我在从步骤2中获取值时遇到了问题。MATCH也只返回第一个匹配行?我想获取所有匹配行的子集,然后再次检查是否可以在这些行中找到列名。

wfsdck30

wfsdck301#

OP在评论中使用建议的FILTER公式找到了一个解决方案,并要求将其作为答案发布:

=INDEX(FILTER('2023-raw'!B2:G53, ('2023-raw'!B2:B53=A47) * ('2023-raw'!C2:C53=C1), "h"), , 4) - INDEX(FILTER('2023-raw'!B2:G53, ('2023-raw'!B2:B53=A47) * ('2023-raw'!C2:C53=C1), "h"), , 3) -  INDEX(FILTER('2023-raw'!B2:G53, ('2023-raw'!B2:B53=A47) * ('2023-raw'!C2:C53=C1), "h"), , 5) -  INDEX(FILTER('2023-raw'!B2:G53, ('2023-raw'!B2:B53=A47) * ('2023-raw'!C2:C53=C1), "h"), , 6)

字符串

u0sqgete

u0sqgete2#

如果你有Excel 365,你可以使用这个“矩阵”。

=MAKEARRAY(4,3,LAMBDA(r,c,
             SUMPRODUCT(tblData[Hours worked]*
                        (tblData[Week]=r)*
                        (tblData[Day]=INDEX(B8:D8,1,c)))

字符串
它会溢出-所以你不能在table上使用它:
x1c 0d1x的数据
我简化了我的示例,使用了一个“工作小时数”列--因此您可以在表中添加一个新列,或者必须计算公式中的小时数。

lg40wkob

lg40wkob3#

只需使用SUMIFS进行微积分。SUMIFS将允许您返回基于标准的数字。如果您试图计算我们的工作(OUT减去IN),您可以这样做。
我做了一个类似于你的假数据集:


的数据
单元格B2中的公式为:

=SUMIFS($O$2:$O$6;$L$2:$L$6;$A2;$M$2:$M$6;B$1)-SUMIFS($N$2:$N$6;$L$2:$L$6;$A2;$M$2:$M$6;B$1)

字符串
如果您需要十进制形式的输出,只需乘以24,就像第二个例子一样。单元格B13中的公式是:

=24*(SUMIFS($O$2:$O$6;$L$2:$L$6;$A2;$M$2:$M$6;B$1)-SUMIFS($N$2:$N$6;$L$2:$L$6;$A2;$M$2:$M$6;B$1))


在这两种情况下,只需向下和向右拖动,公式就可以工作了。
请注意,这是基于你提供的数据。如果你的工作时间表有时提前00:00,也许你需要调整一点。

相关问题