【问题标题】:Excel pivot chart change axis category from drop downExcel数据透视图从下拉列表中更改轴类别
【发布时间】:2017-06-20 19:15:57
【问题描述】:

我经常使用数据透视图来分析数据。这是一个快速和容易。但我认为在调查数据时必须将字段从归档的类别中拖出是不切实际的:一个小例子

car-model car-color crashes
ford      red       3
ford      black     4
toyota    red       2
toyota    red       3

首先,我用汽车模型制作了一个数据透视表,并查看了一个显示每个汽车模型平均碰撞的图。但是我想查看颜色的平均崩溃率,我必须将 car-model 字段拖出类别框并将 car-color 拖到里面。

可以制作一个下拉菜单,我可以从中选择 axix 类别。 在我的真实数据中,我通常有 10-20 个不同的类别字段。

【问题讨论】:

    标签: excel pivot-table


    【解决方案1】:

    根据 MacroMarc 的评论,这是一个建议,其中包括一个数据透视图、一些子过程和一个 Worksheet.Change 事件。

    1 - 设置数据透视图

    从您的示例数据开始,选择范围并使用 Data |插入数据透视图。确认所选范围并指定您希望将数据透视图放置在单元格 K1 中。实际上,这是附表结束的地方,而不是图表本身。

    最初,您可以在数据透视图字段下同时选择 car-modelcar-color。当然,您也需要崩溃

    说到崩溃,你应该继续点击Sum of Crashes

    然后点击Value Field Settings并选择Summarize value field by下的Average

    现在你应该得到这个:

    2 - 制作下拉菜单

    首先,我们将创建一个列表,我们可以在其中选择要显示的值。 转到 公式 |名称管理器

    单击新建 并将您的列表命名为modelORcolor。确保它引用您的类别名称所在的范围 A1:B1。单击确定,然后在下一个窗口中单击关闭

    如果您想仔细检查参考文献是否正确,现在可以在此处选择您的新列表:

    接下来,选择单元格 F2 并转到 Data 选项卡 并选择 Data Validation

    Allow 下,选择 list,然后在 Source 字段中输入您的列表名称 =modelORcolor(不要忘记等号):

    现在您可以在单元格 F2 的下拉列表中进行选择:

    3 - 编写一些宏:

    打开 Visual Basic 编辑器并插入一个新模块。

    您可以在此处插入这段小代码:

    Sub setModel()
        ActiveSheet.ChartObjects("Chart 1").Activate
        ActiveChart.ChartTitle.Text = "Average Crashes by Model"
    
        ActiveChart.PivotLayout.PivotTable.PivotFields("car-color").Orientation = xlHidden
    
        With ActiveChart.PivotLayout.PivotTable.PivotFields("car-model")
            .Orientation = xlRowField
            .Position = 1
        End With
    End Sub
    
    
    Sub setColor()
        ActiveSheet.ChartObjects("Chart 1").Activate
        ActiveChart.ChartTitle.Text = "Average Crashes by Color"
        ActiveChart.PivotLayout.PivotTable.PivotFields("car-model").Orientation = _
            xlHidden
        With ActiveChart.PivotLayout.PivotTable.PivotFields("car-color")
            .Orientation = xlRowField
            .Position = 1
        End With
    End Sub
    

    现在您需要启用对工作表中的更改做出反应的功能。 在 Project Explorer 中转到 Sheet1(Sheet1):

    并插入这段小代码:

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Application.EnableEvents = False
    
        If Range("E3").Value = "car-model" Then
            Call setModel
        End If
    
        If Range("E3").Value = "car-color" Then
            Call setColor
        End If
    
        Application.EnableEvents = True
    
    End Sub
    

    Application.EnableEvents = False 非常重要。没有它,您的代码将触发连锁反应,其中 sn-ps setModel 和 setColor 的更改会触发对工作表更改的新反应。

    保存您的项目(作为 .xlsm 文件以允许宏执行其操作)并返回到您的 Excel 工作表。

    现在您应该可以选择 car-model 或 car-color 并立即在数据透视图中看到所需的结果。

    汽车模型

    汽车颜色

    此解决方案有点受限于您的示例数据。更灵活的解决方案包括将数据范围和列表定义为动态范围。但是这个解决方案应该符合您的规范。试试看,如果遇到任何障碍,请告诉我。

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 2018-03-29
      相关资源
      最近更新 更多