【问题标题】:Is it possible to have a pivot table slicer sort largest to smallest?是否可以让数据透视表切片器从大到小排序?
【发布时间】:2018-01-11 03:31:39
【问题描述】:

我创建了一个带有增益和损失的新表。我的目标是从最大到最小对表格进行增益排序,从最小到最大损失排序。我尝试了一些 vba,但无法对值进行排序。

Sub Macro1() 

Dim wb As Workbook 
Dim ws As Worksheet 
Dim targetTable As ListObject 
Set wb = ThisWorkbook 
Set ws = wb.Worksheets("Project Dash") 

If Worksheets("Project Dash").SlicerCaches("Slicer_Gains__Losses") .SlicerItems("Gai‌​ns").Selected = True Then 

    ActiveSheet.PivotTables("ProjectGain20").PivotFields("Projec‌​t").AutoSort _ xlDescending, "Sum of Work Variance", ActiveSheet.PivotTables("ProjectGain20"). _ PivotColumnAxis.PivotLines(1), 1 

End If 

End Sub

【问题讨论】:

  • 也许显示您的表格和您的预期结果并描述您迄今为止尝试过的内容?如果有代码,请包含足够的代码以成为Minimal, Complete, and Verifiable example
  • 有没有更简单的方法来创建切片器来将数据从升序反转为降序。我认为使用切片器从最大到最小排序会很容易,反之亦然。
  • 嗨,你为什么不通过数据透视表进行排序?你可以把它绑在一个按钮上。切片器对"slice" 不排序。为此,您可以录制一个宏,在感兴趣的字段上执行升序和降序排序,然后将该代码链接到 option buttons,例如,使用标签升序/降序排序。

标签: excel pivot-table vba


【解决方案1】:

下面是一个使用选项按钮来对后备表进行排序的示例。切片器旨在过滤您的数据而不是对其进行排序。当您添加表单控件单选/选项按钮时,您需要编辑文本,如我的图像所示,然后右键单击每个按钮并将每个按钮与宏 CheckOptions 相关联。这里被排序的字段是[Value1],您可以根据需要进行更改。如图所示,您的数据需要设置为表格。

我使用了@L42 的建议来检查哪个选项按钮调用了宏。

排序顺序枚举给出here

进入标准模块的代码:

Option Explicit

Public Sub CheckOptions()                        

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim targetTable As ListObject

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1") 'Change as appropriate
    Set targetTable = ws.ListObjects("Table1")

    Select Case Application.Caller

    Case "Option Button 1"

        SortTable targetTable, 2

    Case "Option Button 2"

        SortTable targetTable, 1

    End Select
End Sub

Private Sub SortTable(ByRef targetTable As ListObject, ByVal myOrder As Byte) 'https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlsortorder-enumeration-excel

    With targetTable.Sort

        .SortFields.Clear

        .SortFields.Add _
        Key:=Range("Table1[[#All],[Value1]]"), SortOn:=xlSortOnValues, order:= _
                   myOrder, DataOption:=xlSortNormal

        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

    End With

End Sub

【讨论】:

  • 切片器不用于排序。尝试我在答案中给出的实现。通过更改几行代码,您可以将其绑定到不同类型的按钮。甚至考虑链接到更改事件。
  • 是否可以将切片器按钮绑定到排序操作?我尝试识别切片器名称和归档/项目但没有成功。
  • 切片器过滤现有字段,即支持数据中的项目。特别是通过关联的可透视更新事件可以捕获切片器更改。因此,您可以尝试参与其中,但我真的不明白您为什么要这样做。只需定位源数据中心 - 它更容易,并且设计有排序功能。
  • 我创建了一个包含 3 行的新表。 1. 收益 - 损失 2. 收益 3. 损失 然后创建了一个切片器,但它与任何数据无关。我试图使用 VBA 将其链接到另一个数据透视表排序顺序。如果 Slicer_Gains_Losses.slicer.field ("Gains") = True 则排序升序类型语句。
  • 感谢您的时间和上面的子。我在仪表板上还有其他切片器,希望能保持一致。再次感谢您的代码和讨论。
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 2019-06-09
  • 1970-01-01
相关资源
最近更新 更多