Excel中如何通过公式按1小时时间区间提取对应B列的最大值?
按1小时时间区间提取对应列最大值的公式实现
前提说明
假设你的时间数据在A列(示例范围A2:A9),数值数据在B列(示例范围B2:B9),目标新表放在D、E列:D列展示时间区间,E列展示对应时段的最大值。
方法1:Excel 365/2021+ 动态数组方案(自动生成结果)
适合大数量级数据,无需手动下拉填充:
- 生成唯一小时区间标签
在D2单元格输入公式,自动提取并去重所有小时段的区间标识:
=UNIQUE(TEXT(A2:A9,"HH:00-HH:59"))
公式会将A列时间转换为12:00-12:59、13:00-13:59这类标准区间格式。
- 批量计算对应区间最大值
在E2单元格输入公式,自动匹配D列区间并输出最大值:
=BYROW(UNIQUE(TEXT(A2:A9,"HH:00")),LAMBDA(hour,MAXIFS(B:B,A:A,">="&hour,A:A,"<"&TEXT(VALUE(hour)+1/24,"HH:00"))))
也可以直接用HSTACK合并区间标签和最大值,一步生成完整结果表:
=HSTACK(UNIQUE(TEXT(A2:A9,"HH:00-HH:59")),BYROW(UNIQUE(TEXT(A2:A9,"HH:00")),LAMBDA(hour,MAXIFS(B:B,A:A,">="&hour,A:A,"<"&TEXT(VALUE(hour)+1/24,"HH:00")))))
方法2:兼容旧版Excel的数组公式(手动下拉)
如果你的Excel版本不支持动态数组,按以下步骤操作:
- 先在D列手动输入所有需要统计的小时区间(比如
12:00-12:59、13:00-13:59) - 在E2单元格输入公式,按
Ctrl+Shift+Enter触发数组公式后下拉填充:
=MAX(IF((A$2:A$9>=TIME(LEFT(D2,2),0,0))*(A$2:A$9<TIME(LEFT(D2,2)+1,0,0)),B$2:B$9,""))
方法3:Google Sheets 一键统计方案
在Google Sheets中用QUERY函数直接分组统计,自动生成带表头的结果:
在D2单元格输入:
=QUERY({A2:A9,B2:B9},"SELECT FORMAT(A,'HH:00-HH:59'), MAX(B) WHERE A IS NOT NULL GROUP BY FORMAT(A,'HH:00-HH:59') LABEL FORMAT(A,'HH:00-HH:59') '时间区间', MAX(B) '最大值'")
核心逻辑说明
所有方案的核心都是按小时维度划分时间区间:判断时间是否落在[HH:00, (HH+1):00)的左闭右开区间内,再对对应B列数值取最大值。动态数组和QUERY函数能自动处理海量数据,避免手动维护区间列表的繁琐。
内容的提问来源于stack exchange,提问作者Pliz89
相关产品推荐
相关产品推荐

