如何在电子表格中筛选日期时间列表提取每日指定时间并对齐日期
解决方案
推荐公式(支持LET函数的版本)
直接在结果输出起始单元格(例如J11)输入以下公式,回车后将自动生成4列对齐结果:依次为4:30对应日期、4:30对应金额、9:30对应日期、9:30对应金额,自动过滤掉任意时间点缺失数据的日期。
=LET( // 定义原始数据范围 raw_data,A11:B, dt_col,INDEX(raw_data,,1), val_col,INDEX(raw_data,,2), // 筛选4:30区间的所有数据,附加提取纯日期列 set_430,FILTER(HSTACK(INT(dt_col),dt_col,val_col),(MOD(dt_col,1)*24>=4.5)*(MOD(dt_col,1)*24<=4.6)), date_430,INDEX(set_430,,1), // 筛选9:30区间的所有数据,附加提取纯日期列 set_930,FILTER(HSTACK(INT(dt_col),dt_col,val_col),(MOD(dt_col,1)*24>=9.5)*(MOD(dt_col,1)*24<=9.6)), date_930,INDEX(set_930,,1), // 取两个时间点都存在的日期交集 common_dates,FILTER(date_430,COUNTIF(date_930,date_430)), // 按交集日期匹配对应数据返回 HSTACK( XLOOKUP(common_dates,date_430,INDEX(set_430,,2)), XLOOKUP(common_dates,date_430,INDEX(set_430,,3)), XLOOKUP(common_dates,date_930,INDEX(set_930,,2)), XLOOKUP(common_dates,date_930,INDEX(set_930,,3)) ) )
兼容无LET函数的拆分写法
如果你的表格版本不支持LET函数,可分别在两列输入以下公式:
- J列(4:30日期+金额)输入:
=FILTER(FILTER(A11:B,(MOD(A11:A,1)*24>=4.5)*(MOD(A11:A,1)*24<=4.6)),COUNTIF(INT(FILTER(A11:A,(MOD(A11:A,1)*24>=9.5)*(MOD(A11:A,1)*24<=9.6))),INT(FILTER(A11:A,(MOD(A11:A,1)*24>=4.5)*(MOD(A11:A,1)*24<=4.6)))))
- L列(9:30日期+金额)输入:
=FILTER(FILTER(A11:B,(MOD(A11:A,1)*24>=9.5)*(MOD(A11:A,1)*24<=9.6)),COUNTIF(INT(FILTER(A11:A,(MOD(A11:A,1)*24>=4.5)*(MOD(A11:A,1)*24<=4.6))),INT(FILTER(A11:A,(MOD(A11:A,1)*24>=9.5)*(MOD(A11:A,1)*24<=9.6)))))
实现逻辑
- 用
INT(日期时间值)提取纯日期,忽略时间部分,用于日期匹配 - 对两个时间点的筛选结果日期集合取交集,仅保留两个时间点都有数据的日期
- 按交集日期分别匹配对应时间点的原始数据,保证两行的日期完全对应,缺失任意一个时间点数据的日期会被同时从两个结果中剔除
内容的提问来源于stack exchange,提问作者Arbie
相关产品推荐
相关产品推荐

