【问题标题】:Pivot Table: Showing value of (Multiple Items)数据透视表:显示(多个项目)的值
【发布时间】:2014-07-16 08:10:42
【问题描述】:

我正在尝试创建一个带有标题和图例的数据透视表和数据透视图,这些标题和图例会根据所选的选择而改变。例如,如果我选择 Apple 和 Banana,如果我选择 Apple,则标题和图例应为 Apple。这部分相对容易,但是,如果我同时选择 Apple 和 Banana,则数据透视表会显示 (Multiple Items)。

我希望它改为显示“Apple,Banana”之类的内容,但我不知道如何做到这一点。我在网上环顾四周,发现与我分享我的问题的少数人最终没有得到回复(即Excel 2010 Pivot Table Filter - How to print multiple filter selection values

非常感谢任何帮助!

编辑:我愿意使用宏来让它工作,所以让我们看看 VBA 社区是否有任何想法。

【问题讨论】:

  • 我很抱歉这么说,但您的问题与帮助中心中定义的编程无关,因此这里的主题无关紧要。您可能想改用SuperUser
  • @mehow 它肯定 IS 是一个 VBA 问题!
  • 如果不允许 excel 问题,为什么会有一个 excel 标签(看看 excel 中唯一的编程是 VBA 并且有一个标签)?你是对的,我如何,这是一个我想不经尝试就解决的问题,但那是因为我真的不知道从哪里开始。我也无法在互联网上找到从哪里开始的地方。因此,与其投反对票并抛出消极情绪,不如指出一个开始的地方,或者简单地说你也不确定?
  • @LiamBee:“VBA 是一种编程语言吗?”当然也是一个 VBA 问题,但仍然是题外话。顺便说一句:This question is mentioned on Meta
  • 我同意我的看法。当被问到这是一个超级用户问题时,现在它被标记为 VBA 更清楚您对代码解决方案持开放态度,但您的问题没有显示任何代表您之前进行的编码工作的证据。如果您尝试过代码,请展示您的努力。

标签: vba excel charts pivot-table


【解决方案1】:
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

此代码将循环遍历数据透视表(在本例中为“PivotTable6”)中的字段名称(在本例中为“名称”),并将收集数组 Pname 中的所有数据。然后它会将您的图表标题更改为该数组,作为一个完整的字符串,中间有逗号。

可能需要对您的应用程序进行一些调整,但我相信您可以解决

【讨论】:

  • 伟大的宏和思想,但它抓住了所有可能的选择,无论它们是否被选中 :( 不过我也许能找到解决这个问题的方法。谢谢你的开始!
  • @Agony 因此为什么我说我相信你能弄明白 ;) 我会看看我是否可以添加一个过滤器,但我会在剩下的时间里远离比赛晚上。如果您找到方法,请将其发布为答案!
  • 没问题,我也会,但我肯定会调查这个。希望我能在.Visible = True 行中找到一些东西,但这是一个很棒的帮助。如果我发现了什么,我一定会发布作为答案:) 再次感谢您
【解决方案2】:

不是编程答案,但我认为这可以满足您的要求。在我的示例中,我使用了一张表格,其中包含三种水果的月度销售数据:苹果、香蕉和橙子。从功能区中选择插入 > 数据透视表 > 数据透视图。它应该是这样的:

单击数据透视表占位符(在我的图片左侧),右侧的数据透视字段“播放区域”应更改为包含行和列标签。将图例上想要的项目类型拖入Column Labels,将x轴项目拖入Row Labels,将要绘制图表的数据拖入Values。将图表类型更改为折线图,您应该会得到这样的结果,并且您想要的过滤器就在图例的正上方:

希望这是你想要的!

【讨论】:

  • 感谢您的回答,但不完全是。在我使用的表格中,Apples 和 Oranges 是同一行,并且该行会根据您是否选择 Apples 和 Oranges 或仅选择 Apples 而发生变化。我希望根据这个改变标题,而不是传说(那是一场完全不同的战斗)。
【解决方案3】:

下面的宏循环遍历数据透视表的 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 

【讨论】:

    【解决方案4】:

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

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多