使用Excel公式列出可见的透视项目

时间:2016-04-23 09:47:51

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

在Excel数据透视表中,当我在报表过滤器中选择多个项目时,Excel只显示我选择了多个项目。

数据

Data

我可以选择多个项目:

Pivot2

但是,一旦完成选择,我就不会看到我选择了哪些元素。

Pivot1

我想显示选择了哪些项目,例如打印报告时。我找到了一种使用VBA和用户定义函数的方法。

Function GetVisibleItems(FieldName As String) As String

    Dim PivotTable As PivotTable
    Set PivotTable = ActiveSheet.PivotTables(1)

    Dim PivotField As PivotField
    Set PivotField = PivotTable.PivotFields(FieldName)

    Dim PivotItem As PivotItem
    Dim Result As String

    For Each PivotItem In PivotField.PivotItems()
        If PivotItem.Name <> "(blank)" Then
            If PivotItem.Visible Then
                If Len(Result) > 0 Then Result = Result & ", "
                Result = Result & PivotItem.Name
            End If
        End If
    Next

    GetVisibleItems = Result

End Function

是否可以仅使用Excel公式而不是VBA获得相同的结果?

3 个答案:

答案 0 :(得分:0)

Martin - 这可能不像您正在寻找的那样直接,但使用工作簿函数来构建您正在寻找的字符串......

下面是一个简单的信息表......

enter image description here

...以及从中创建的数据透视表......

enter image description here

在数据透视中,您可以看到Person 2和Person 6被过滤掉了。

回到桌面,使用此公式(填充)添加了一列...

=IF(ISERROR(GETPIVOTDATA("Grade",Sheet5!$A$3,$A$1,A2)),"",A2)

注意:Sheet5包含数据透视表。 A3是枢轴的左上角。

提供此结果......

enter image description here

哪里有空白而不是第2人和第6人。

字符串是使用Chip Pearson's StringConcat UDF生成的,因为它比&CONCATENATE所需的所有输入更紧凑......

enter image description here

答案 1 :(得分:0)

我所寻找的是由Slicers提供的。切片器显示已选择且可打印的范围。将可见的Pivot Elements列表写入单元格是可能的,甚至可能使用棘手的Excel公式,但似乎过度设计它。

答案 2 :(得分:0)

TEXTJOIN函数可以做到这一点。从Excel 2016起。

  

TEXTJOIN函数组合来自多个范围和/或字符串的文本,并包括您在将要组合的每个文本值之间指定的定界符。如果分隔符为空文本字符串,则此函数将有效地将范围连接起来。