从Excel数据透视表过滤器中查找最高价值组合

时间:2014-07-21 00:30:55

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

我不确定我是否使用了正确的技术,所以如果我离开,请原谅我。

我从之前的电子邮件广告系列中获得了大量数据。我已根据主题行内容的布尔值(Y / N)对广告系列进行分类,例如:主题行已个性化主题行包含紧急度等...

我将列作为开放率运行,值为“平均开放率”#39;行标签是广告系列名称,报告过滤器是所有布尔值。

enter image description here

我正在努力获得最终的组合'这将导致最高的平均开放率。有没有办法自动化这个过程,而不是通过并手动选择过滤器的Y / N选项,直到找到最高的平均值?

作为一个例子;我试图最终得到的结果是这样的:

主题 - 个性化Y
主题 - 紧迫性Y
主题 - 产品组N
主题 - 折扣价Y
主题 - 事件参考N
主题 - 包含品牌N
主题 - LOLS Y

据我所知,对于这个表来说,手动执行它并不耗费时间,但我想在大型数据集上运行类似的操作,所以如果我可以自动化它会很棒。

1 个答案:

答案 0 :(得分:0)

如果您了解VBA,可以尝试以下方法:

Sub macro1()
    Dim filters As PivotFields
    Dim combinations As Integer
    Dim reportRow As Integer
    Dim pt As PivotTable

    ' PivotTable to manipulate... pls modify yourself
    Set pt = ActiveWorkbook.Sheets("Sheet4").PivotTables("PivotTable1")
    Set filters = pt.PageFields     ' Array of all page filters
    combinations = 2 ^ filters.Count
    reportRow = 2

    ' For each combinations
    For i = 1 To combinations
        ' Set filter to {N N N} {N N Y} {N Y N} {N Y Y} {Y N N} ... etc
        For n = 0 To filters.Count - 1
            If ((i And (2 ^ n)) > 0) Then
                filters(n + 1).CurrentPage = "Y"
            Else
                filters(n + 1).CurrentPage = "N"
            End If
        Next n

        ' Extract results ... modify it yourself
        Cells(reportRow, 10).FormulaR1C1 = pt.GetData("Value")
        For n = 1 To filters.Count
            Cells(reportRow, 10 + n).FormulaR1C1 = filters(n).CurrentPage
        Next n
        reportRow = reportRow + 1

    Next i

End Sub

代码应该是自我解释的,如果您需要对任何代码进一步说明,请告诉我:))