【问题标题】:Excel: Multiple filter columns in pivot tableExcel:数据透视表中的多个过滤列
【发布时间】:2016-10-07 14:58:40
【问题描述】:

我有一个电子表格,其中包含有关产品错误代码的大量数据。该电子表格具有要输入的三个错误代码的列。

例如:

errorcode1  errorcode2 errorcode3
88          
100         88
101
88          115        
110         90         88

数据透视表的设置方式,我只能过滤一个错误代码。如果我想知道总共 88 个代码,我会在 errorcode1 中过滤 88 个,即使还有两个结果也只有 2 个。

理想情况下,目标是能够添加过滤器的结果。例如

errorcode1  errorcode2  errorcode3
88
100         88
88          115
110         90          88

我怎样才能完成错误代码的总和而不是被限制在一列?

【问题讨论】:

  • 除了缺少 101 的第 3 行之外,我看不出第一个示例和第二个示例之间有任何区别。请您解释一下...您能否添加数据透视表的视觉效果,这将有助于理解问题。

标签: excel pivot-table


【解决方案1】:

我会用一些 =countifs() 设置一个单独的表。 (显然,在您的工作簿中,我会引用包含代码的单元格。)

Error code    Count
88            =countifs(A2:C10,88)
100           =countifs(A2:C10,100)
101           =countifs(A2:C10,101)

这里的好处是您可以轻松添加新的错误代码,然后将它们复制下来。

请看下面的截图:

如果你想通过错误代码知道错误代码的数量,只需引用正确的列即可:

【讨论】:

  • 感谢您的帮助,但这并不完全是我想要的。我在数据透视表中有数据,我可以使用下拉部分对其进行过滤。我想过滤多个下拉部分并将它们本质上“添加”在一起并向我显示所有结果,而不仅仅是一列
  • @MikeBrunner 好的...我不确定您到底想要什么。您的意思是您希望能够过滤数据透视表上的多个列吗?或者 OldUgly 在下面的回答有帮助吗?
【解决方案2】:

当您的源数据是“扁平的”时,数据透视表效果最好 - 即没有进行预先组织。

您的数据是部分组织的。

我建议您的原始数据如下所示...

Err Index   ErrCode
1   1   88
1   2   
1   3   
2   1   100
2   2   88
2   3   
3   1   101
3   2   
3   3   
4   1   88
4   2   115
4   3   
5   1   110
5   2   90
5   3   88

现在您可以生成许多有趣的数据透视表...

每个 ErrCode 发生了多少次?

我报告了多少次 ErrCodes?

...等等。

编辑:扁平化数据

假设您有大量已按照您描述的方式组织的源数据,我会使用一小段 VBA 来展平数据。

下面是一个例子:

Option Explicit
Sub Flatten()
Dim SrcSht As Worksheet
Set SrcSht = Worksheets("Sheet1")

Dim DestSht As Worksheet
Set DestSht = Worksheets("Sheet2")

Dim LastSrcRow As Long
LastSrcRow = SrcSht.Range("A" & SrcSht.Rows.Count).End(xlUp).Row

Dim LastSrcCol As Long
LastSrcCol = SrcSht.Cells(1, SrcSht.Columns.Count).End(xlToLeft).Column

DestSht.Cells(1, 1) = "Err"
DestSht.Cells(1, 2) = "Index"
DestSht.Cells(1, 3) = "ErrCode"

Dim SrcRow As Long, SrcCol As Long, DestRow As Long
DestRow = 1
For SrcRow = 2 To LastSrcRow
    For SrcCol = 1 To LastSrcCol
        DestRow = DestRow + 1
        DestSht.Cells(DestRow, 1) = SrcRow - 1
        DestSht.Cells(DestRow, 2) = SrcCol
        DestSht.Cells(DestRow, 3) = SrcSht.Cells(SrcRow, SrcCol).Value
    Next SrcCol
Next SrcRow

Set SrcSht = Nothing
Set DestSht = Nothing

End Sub

【讨论】:

  • 感谢您的帮助。这看起来很有趣,并且可能会奏效。我怎样才能将我的列表转换成一个索引列表,就像你展示的那样?
  • 我会使用 VBA。我编辑了解决方案以包含 VBA 的外观。
猜你喜欢
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 2016-09-18
  • 1970-01-01
相关资源
最近更新 更多