Excel中以日期为列标题的数据按指定日期范围汇总工时的方案咨询
Excel中以日期为列标题的数据按指定日期范围汇总工时的方案咨询
嘿,我完全懂你的烦恼——普通数据透视表要手动选一堆日期列,或者每次换范围都要重新设置,确实太折腾了。这里有几个实用的方案,你可以根据自己的Excel版本和需求来挑:
方案一:用函数做动态汇总(适合快速调整日期范围)
先在表格外设置两个单元格,比如E1放起始日期,F1放结束日期。假设你的数据结构是:
- A列:姓名(A2:A100)
- 第一行(B1:ZZ1):日期列标题
- B2:ZZ100:对应工时数据
然后在G2单元格输入下面的公式,下拉就能得到每个人指定日期范围内的总工时:
=SUM(INDEX(B2:ZZ100,MATCH(A2,A2:A100,0),MATCH(E1,B1:ZZ1,0)):INDEX(B2:ZZ100,MATCH(A2,A2:A100,0),MATCH(F1,B1:ZZ1,0)))
原理是用MATCH定位起始/结束日期的列位置,再用INDEX圈出对应姓名的工时列范围,最后SUM求和。只要改E1和F1的日期,汇总结果会自动更新,完全不用手动调整。
方案二:改造数据结构,用更灵活的数据透视表
普通透视表麻烦是因为你的数据是宽格式(日期当列),转成长格式(每一行是「姓名+日期+工时」)后,透视表就能随心所欲地筛选日期范围了:
- 选中你的整个数据区域,点击「数据」选项卡→「从表格/区域」(如果弹出提示就勾选「我的表格有标题」)
- 进入Power Query编辑器后,选中「姓名」列,点击「转换」选项卡→「逆透视其他列」
- 此时数据会变成三列:姓名、属性(日期)、值(工时),可以把「属性」重命名为「日期」,「值」重命名为「工时」
- 点击「关闭并上载」,把转换后的数据放到新工作表
- 基于这个长格式数据做透视表:把「姓名」拖到「行」区域,「日期」拖到「筛选器」区域,「工时」拖到「值」区域(设置为求和)
现在你只要在透视表的日期筛选器里选想要的范围(比如某一周),就能自动得到每个人的总工时了。后续新增数据的话,只要刷新透视表就行,非常省心。
方案三:Excel 365/2021专属:动态数组一键生成汇总表
如果你用的是新版本Excel(支持动态数组),可以用LET+FILTER+BYROW组合一步生成汇总表,连下拉公式都省了:
=LET( 日期行, B1:ZZ1, 工时区域, B2:ZZ100, 姓名列, A2:A100, 起始日期, E1, 结束日期, F1, 筛选后的工时列, FILTER(工时区域, (日期行>=起始日期)*(日期行<=结束日期)), HSTACK(姓名列, BYROW(筛选后的工时列, SUM)) )
输入后会直接生成包含姓名和对应汇总工时的完整表格,修改E1/F1的日期范围,表格会自动更新,效率拉满。
小提醒
- 确保你的日期列标题是真正的日期格式,不是文本,不然
MATCH、FILTER这类函数会出错(可以选中日期列,右键→设置单元格格式→日期) - 如果用Power Query转长格式,记得后续新增数据后要刷新查询(右键转换后的表格→刷新)
备注:内容来源于stack exchange,提问作者Kaijuu Yum
相关产品推荐
相关产品推荐

