首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EXCEL中带有日期和和公式的Xlookup

EXCEL中带有日期和和公式的Xlookup
EN

Stack Overflow用户
提问于 2022-11-14 13:32:09
回答 3查看 72关注 0票数 0

我试图找出一个公式,以找出每个工人每月工作时间和每个项目的工作时数之和。我很确定XLOOKUP和/IF以及SUBTotal可能是有用的,但我不太清楚如何将它们全部结合起来。这是准确的数据。

每个雇员的查找值(A栏),每个雇员的项目查找值(B栏),每个时间表期间的查找值(C栏)格式: 2022/06/03,然后将每个项目每个月的总工时之和(D栏)

提前感谢!

我尝试了XLOOKUP公式和小时的日期小计公式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-11-14 14:17:19

Sumifs解决了你的问题

代码语言:javascript
复制
=SUMIFS($D$2:$D$12,$A$2:$A$12,$A15,$B$2:$B$12,$B15,$C$2:$C$12,">="&DATE(2022,7,1);$C$2:$C$12,"<="&DATE(2022,7,31))

票数 0
EN

Stack Overflow用户

发布于 2022-11-14 14:30:16

也许您也可以尝试使用SUMPRODUCT()

·单元C20中使用的公式

代码语言:javascript
复制
=SUMPRODUCT((A20=$A$2:$A$13)*(B20=$B$2:$B$13)*(TEXT($C$2:$C$13,"mm/yyyy")="06/2022")*($D$2:$D$13))

注意:使用如下所示的单元格引用使其动态

·单元C20中使用的公式

代码语言:javascript
复制
=SUMPRODUCT(($A20=$A$2:$A$13)*($B20=$B$2:$B$13)*(TEXT($C$2:$C$13,"mm/yyyy")=TEXT(C$18,"mm/yyyy"))*($D$2:$D$13))
票数 0
EN

Stack Overflow用户

发布于 2022-11-14 15:12:23

这种方法使用O365函数生成数组解决方案。引用日期在单元格H2中作为1x3数组生成,格式为日期如下:mmm-yy (与计算无关,仅用于可视化):

代码语言:javascript
复制
=EDATE(DATE(2022,6,1),SEQUENCE(1,3,0))

然后在H3中放置以下公式并将其向右展开,不需要将其向下扩展

代码语言:javascript
复制
=LET(set, $A$2:$D$13, lkup, $F$3:$G$8, SOM, H2, projects, INDEX(set,,1), 
  employes, INDEX(set,,2),timesheets, INDEX(set,,3), hours, INDEX(set,,4),
  MAP(INDEX(lkup,,1), INDEX(lkup,,2), LAMBDA(prj,empl, LET(EOM, EOMONTH(SOM,0),
    SUM(FILTER(hours, (projects =prj) * (employes = empl) * (timesheets >= SOM) 
     * (timesheets <= EOM),0))
  )))
)

其中LET用于,易于阅读和作文。

注意事项:您也可以使用以下选项之一而不是SUM/FILTER

代码语言:javascript
复制
SUMPRODUCT(hours, (projects =prj) * (employes = empl) * (timesheets >= SOM) 
 * (timesheets <= EOM))

代码语言:javascript
复制
SUMPRODUCT(hours, N(projects =prj), N(employes = empl), N(timesheets >= SOM), 
  N(timesheets <= EOM))

或者仅仅是SUM

代码语言:javascript
复制
SUM(hours * (projects =prj) * (employes = empl) * (timesheets >= SOM) 
  * (timesheets <= EOM))

这是优先考虑的问题。

这是输出:

如果您想知道是否有可能避免将公式扩展到右边,那么我们可以在一个公式中得到整个结果,是的,这是可能的。

备选方案1:使用DROP/REDUCE/HSTACK

代码语言:javascript
复制
=LET(set, A2:D13, lkup, F3:G8, SOMs, H2:J2, projects, INDEX(set,,1), 
  employes, INDEX(set,,2),timesheets, INDEX(set,,3), hours, INDEX(set,,4),
  DROP(REDUCE(0,SOMs, LAMBDA(acc, SOM, HSTACK(acc, LET(EOM, EOMONTH(SOM,0),
  MAP(INDEX(lkup,,1), INDEX(lkup,,2), LAMBDA(prj, empl,
   SUM(hours * (projects =prj) * (employes = empl) * (timesheets >= SOM) 
    * (timesheets <= EOM))
  )))))),,1)
)

备选方案2:使用TEXTSPLIT/TEXTJOIN

代码语言:javascript
复制
=LET(set, A2:D13, lkup, F3:G8, SOMs, H2:J2, projects, INDEX(set,,1), 
  employes, INDEX(set,,2),timesheets, INDEX(set,,3), hours, INDEX(set,,4),
  byC, BYCOL(SOMs, LAMBDA(SOM, LET(EOM, EOMONTH(SOM,0), 
  mp, MAP(INDEX(lkup,,1), INDEX(lkup,,2), LAMBDA(prj, empl,
     SUM(hours * (projects =prj) * (employes = empl) * (timesheets >= SOM) 
      * (timesheets <= EOM))
  )), TEXTJOIN(",",, mp)
  ))),
  TRANSPOSE(1*TEXTSPLIT(TEXTJOIN(";",, byC), ",", ";"))
)

注意事项:在这两种选择下,不需要在范围内使用$-notation。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74432476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档