数据透视表:显示(多个项目)的值

时间:2014-05-27 12:04:43

标签: excel vba excel-vba charts pivot-table

我正在尝试创建一个数据透视表和数据透视表,其中包含将根据所选内容更改的标题和图例。例如,如果我选择Apple和Banana,如果我选择Apple,标题和图例应该是Apple。这部分相对容易,但是,如果我同时选择Apple和Banana,则数据透视表会显示(多个项目)。 Apples and Bananas

我希望这能代替" Apple,Banana",但我对我如何做到这一点没有丝毫的线索。我在网上浏览了一下,我发现分享我的问题的几个人最终没有收到回复(即Excel 2010 Pivot Table Filter - How to print multiple filter selection values

非常感谢任何帮助!

编辑:我愿意使用宏来实现这一点,所以让我们看看VBA社区是否有任何想法。

4 个答案:

答案 0 :(得分:2)

Public Sub test()


Dim PVI As PivotItem
Dim Pname(100) As String
Dim MS As String


For Each PVI In ActiveSheet.PivotTables("PivotTable6").PivotFields("Name").PivotItems

Pname(i) = PVI.Value

If MS = "" Then

MS = Pname(i)

Else

MS = MS & ", " & Pname(i)

End If

i = i + 1
Next PVI

'MsgBox MS

ActiveSheet.ChartObjects(1).Chart. _
ChartTitle.Characters.Text = MS

End Sub

此代码将循环显示数据透视表中的字段名称(在本例中为" Name")(在本例中为" PivotTable6")并将收集所有数据数组Pname。然后,它会将您的图表标题更改为整个字符串,其中包含逗号。

可能需要对你的应用程序进行一些调整,但我相信你能搞清楚

答案 1 :(得分:0)

不是编程答案,但我认为这可以做你想要的。在我的例子中,我使用了一个表,其中包含三种水果的月销售数据:苹果,香蕉和橙子。从色带中选择Insert>枢轴表>数据透视图。它应该是这样的:

Pivot Chart placeholders

单击Pivot表占位符(在我的图片左侧)和pivot字段" play area"在右侧应更改为包括行和列标签。将图例上所需的项目类型拖到“列标签”中,将x轴项目拖动到“行标签”,然后将要绘制的数据拖动到“值”。将图表类型更改为折线图,你应该得到这样的东西,你想要的过滤器直接在图例上方:

enter image description here

希望这能做到你想要的!

答案 2 :(得分:0)

下面的宏循环遍历数据透视表的PageField以查找可见元素,创建包含这些元素的字符串,然后更新图表标题:

Sub UpdateChartTitle()

Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim co As ChartObject
Dim c As Chart
Dim s As String


   s = ""

   Set pt = ThisWorkbook.ActiveSheet.PivotTables(1) 'specify the correct PivotTable
   Set pf = pt.PageFields.Item(1) 'should be the only PageField

   For Each pi In pf.PivotItems 'loop through the fields and find only the visible ones
      If pi.Visible Then s = s & pi.Name & ", "
   Next

   s = Left(s, Len(s) - 2)

   Set co = ThisWorkbook.ActiveSheet.ChartObjects(1) 'specify the correct chart object
   co.Chart.ChartTitle.Text = s 'change the title

End Sub 

答案 3 :(得分:0)

这里是更改标题栏的代码,将其放在工作表模块下(以便在任何更改时触发)。您唯一需要做的就是将指针更改为指向您自己的表格和图表 -

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As PivotField
Dim b As PivotItem
Dim c As ChartObject
Dim headerText As String

'set pointers to the objects, replace the pointers with our own !!!!!
Set a = Application.Worksheet("Sheet 1").PivotTables("PivotTable1").PivotFields("Type")
Set c = Application.Worksheet("Sheet 1").ChartObjects("Chart 1")

'loop trough the field items and save the visible values to a string. 
'You could hone the code to change the separator for the items for it to appear the way you like. 
'Also note that the title bar on the chart has to be visible in order for this to work, 
'if not it will give you subscript out of range error.
For Each b In a.PivotItems
If b.Visible = True Then
    headerText = headerText + b.Value + ", "
End If
Next

'Set the value to the title bar
c.Chart.ChartTitle.Text = headerText
End Sub

询问您是否需要对代码的某些部分进行任何详细解释或说明。