如何用VBA在Excel数据透视表中按小时(而非分钟)分组时间值?
Excel透视表时间字段按小时分组失效的解决办法
问题根源
- 你使用的
LabelRange.Group方法稳定性不足,有时无法正确识别时间字段的范围 - 仅设置单元格显示格式为
hh:mm:ss无效——如果源数据是文本格式的时间,透视表无法进行时间分组操作 - 分组时用
By:=TimeValue("01:00:00")参数不够精准,应该用时间单位专用参数指定分组间隔
修正方案
第一步:将源数据转换为真正的时间数值
先把K列内容从文本(若存在该情况)转为Excel可识别的时间数值,再设置显示格式:
With wsGuardian.Range("K6:K" & LastFila) ' 强制转换为时间数值 .Value = .Value ' 设置显示格式为hh:mm:ss .NumberFormat = "hh:mm:ss" End With
第二步:修改透视表分组代码
替换原有分组逻辑,直接对字段的DataRange进行分组,使用明确的时间单位参数:
With ptHour ' 保留你原有的字段设置代码 .PivotFields("Vehicle id").Orientation = xlPageField .PivotFields("Type").Orientation = xlPageField .PivotFields("Confirmation").Orientation = xlPageField .PivotFields("Fecha").Orientation = xlColumnField .PivotFields("hour").Orientation = xlRowField .AddDataField .PivotFields("Vehicle id"), "count of Vehicle ID", xlCount ' 先清除可能存在的旧分组,再重新分组 On Error Resume Next .PivotFields("hour").ClearAllFilters .PivotFields("hour").DataRange.Group _ Start:=TimeValue("00:00:00"), _ End:=TimeValue("23:59:59"), _ Hours:=1, ' 指定按1小时分组 Minutes:=0, _ Seconds:=0 On Error GoTo 0 End With
额外提示
如果问题仍未解决,可尝试刷新透视表缓存后再执行分组操作,添加以下代码:
ptHour.PivotCache.Refresh
内容的提问来源于stack exchange,提问作者jordan Gutierrez
相关产品推荐
相关产品推荐

