如何为我的数据透视表添加日历过滤器?

问题描述 投票:0回答:1

我正在 Excel 中构建一个工作数据透视表。有没有一种方法可以让我构建一个日历切片器,让其他人可以单击(例如)9 月 30 日,并更新数据透视表?

我的专栏是:

  1. 产品
  2. 城市
  3. 开始日期
  4. 结束日期

免责声明:我不是在寻找切片机。这些对用户不友好,因为我有 2 个日期列开始日期和结束日期

我尝试过切片机,但这些还不够好。例如,如果我的产品仅在 8 月 1 天销售,它将显示为整个月。

excel pivot-table timeline
1个回答
0
投票

尝试使用 Excel 的 ActiveX 控件和一些 VBA 代码。以下是创建日历控件的解决方案,该控件根据所选日期更新数据透视表:

1.插入日历控件:

  1. 转到您想要日历控件的工作表。
  2. 单击
    Developer
    选项卡。如果您没有看到“开发人员”选项卡,则需要先启用它。
  3. 单击“控件”组中的
    Insert
  4. 从 ActiveX 控件部分中,选择
    More Controls
    (工具图标)。
  5. 从列表中选择
    Microsoft Date and Time Picker Control
    并单击
    OK
  6. 在工作表上绘制控件。

2.添加 VBA 代码来更新数据透视表:

  1. 右键单击日历控件并选择
    Properties
    。将
    Name
    属性更改为
    DatePicker
    之类的内容。
  2. 关闭属性窗口。
  3. 再次右键单击日历控件并选择
    View Code
  4. 在 VBA 编辑器中,您将看到日历控件的代码窗口。输入以下代码:
Private Sub DatePicker_Change()
    Dim pt As PivotTable
    Dim startDateField As PivotField
    Dim endDateField As PivotField
    Dim selectedDate As Date

    ' Set the pivot table
    Set pt = ThisWorkbook.Worksheets("YourPivotSheetName").PivotTables("YourPivotTableName")
    
    ' Set the start and end date fields
    Set startDateField = pt.PivotFields("Start date")
    Set endDateField = pt.PivotFields("End date")
    
    ' Get the selected date from the calendar control
    selectedDate = Me.DatePicker.Value
    
    ' Clear any existing date filters
    startDateField.ClearAllFilters
    endDateField.ClearAllFilters
    
    ' Apply the date filter
    startDateField.PivotFilters.Add Type:=xlDateAfter, Value1:=selectedDate - 1
    endDateField.PivotFilters.Add Type:=xlDateBefore, Value2:=selectedDate + 1
End Sub

YourPivotSheetName
替换为包含数据透视表的工作表的实际名称,并将
YourPivotTableName
替换为数据透视表的名称。

3.测试日历控件:

  1. 返回 Excel 并从日历控件中选择一个日期。
  2. 数据透视表应更新以仅显示所选日期介于开始日期和结束日期之间的数据。

此解决方案允许用户从日历控件中选择日期,数据透视表将更新以仅显示该日期可用的产品。

© www.soinside.com 2019 - 2024. All rights reserved.