在两个时间戳之间过滤数据透视表

时间:2019-04-29 10:07:12

标签: excel vba pivot-table

我的数据透视表类似于:2019/1/13 1:002019/1/13 4:00…直到2019/3/12 23:00
我想过滤2019/2/132019/3/12期间的所有时间戳,包括2019/2/13 2:002019/2/13 6:00

试图使用以下代码

datecom = DateSerial(Year(Date), Month(Date) - 3, Day(Date))

dDate = Format(datecom + TimeValue("00:00:00"), "yyyy-mm-dd hh:mm")
dDateto = Format(Now(), "yyyy-mm-dd hh:mm")

Set PvtTbl = sh.PivotTables("ROS-PVT5").PivotFields("IN Raised")

PvtTbl.ClearAllFilters
PvtTbl.PivotFilters.Add Type:=xlCaptionIsBetween, Value1:=dDate, Value2:=dDateto

但是,它将显示为标签过滤器,但未返回任何内容。
如何使用VBA过滤两个日期之间的所有时间?

2 个答案:

答案 0 :(得分:0)

变量名称

首先,您不应该不要将变量名“ PvtTbl”用于PivotField -这会引起误解,并容易导致误解或错误!

我建议在每个模块上方使用Option Explicit并声明e。 G。像这样:

Dim PvtTbl as PivotTable
Dim PvtFld as PivotField

xlCaptionIsBetween与xlDateBetween

我建议使用xlCaptionIsBetween代替xlDateBetween来比较日期值!第一个进行文本比较,并且只有当您使用年/月/日表示法的日期格式时,才有机会在您的情况下工作。


示例

日期过滤器仅适用于RowFieldColumnField,但不适用于数据透视表本身或PageField(这是一个过滤器字段。您可以在其中使用时间切片器)。

如果您的数据透视字段是行或列字段,并且其中具有日期时间值,则其PivotFilter的值需要为String(就像您已经做的那样)。

我建议使用Add2,使用类型xlDateBetween,用CStr键入每个日期时间,并使用WholeDayFilter

Set PvtFld = PvtTbl.RowFields("IN Raised")
PvtFld.ClearAllFilters
PvtFld.PivotFilters.Add2 _
    Type:=xlDateBetween, _
    Value1:=CStr(DateSerial(Year(Date), Month(Date) - 1, Day(Date))), _
    Value2:=CStr(Date), _
    WholeDayFilter:=True

仅当您不能整天工作并且需要排除一些小时时,请像以前一样使用格式化的字符串,包括小时信息,并WholeDayFilter:=False

在任何情况下都不必添加TimeValue(“ 00:00:00”),因为它刚好等于0。

答案 1 :(得分:-1)

它的工作原理如下。不知道是因为我重新打开了该工作表。

dDate = Format(datecom, "yyyy/m/dd")
dDateto = Format(Now(), "yyyy/m/dd")


'''''''''''Pivot 5
Set PvtTbl = sh.PivotTables("ROS-PVT5").PivotFields("IN Raised")

PvtTbl.ClearAllFilters

PvtTbl.PivotFilters.Add2 Type:=xlCaptionIsBetween, Value1:=dDate, Value2:=dDateto