如何在excel中为1个过滤的原始数据集创建多个图表/报告?

时间:2011-08-25 23:05:33

标签: excel charts excel-vba reporting vba

我正在Excel 2007中为我的工作制作一套报告 我得到了一组原始数据,它被组织成一个excel表。 这个原始数据会发生变化,因此我试图制作的报告需要允许这样做。 我还获得了一组模板图表。 这些将用于分别反映原始数据中22个不同组的结果。对于每个组,图表是相同的,但必须为每个组创建一个新的工作表(带有一组图表)。

我花了很多时间试图这样做,我想我会以错误的方式解决这个问题。 这是我做的一个宏的摘要,它接近给我最终结果(我最终复制并粘贴所有组)。

  1. 仅为群组过滤原始数据。
  2. 复制整张纸。
  3. 仅作为值粘贴到另一个工作表。 (这给我一个关于使用太多资源的错误)
  4. 现在,对于每个组,我都有一个图表工作表和工作表,其中包含复制的筛选结果。然后,我为图表数据制作了第三张表。此工作表有许多公式,可以对每个图表的筛选数据运行计算。图表引用了这些。

    这真的是最简单的方法吗?复制每个组的宏有很多工作要做。为每个组的每个图表分配数据。另外,我现在在工作簿中有67个工作表。这是透视表可以做得更容易吗?

1 个答案:

答案 0 :(得分:0)

我假设这些组是预定义的?如果是这样,我会创建动态电子表格。

  1. 在主页面上创建一个过滤器并添加一个子程序,如:

    Public Sub SetAutoFilter(ByVal GroupName As String)
    
      Me.AutoFilterMode = False
    
      Dim intRow As Long: intRow = Me.Range("B65536").End(xlUp).Row
    
      If intRow = 1 Then Exit Sub 'nothing to filter
    
      With Me.Range(Cells(1,1), Cells(intRow, 23)) '23 columns
        .AutoFilter
        .AutoFilter Field:=1, Criteria1:=GroupName
      End With
    
    End Sub
    

    通过这种方式,您将拥有一个过滤数据的代码,而不必一遍又一遍地复制它。

  2. 使用下拉列表创建第二个工作表,其中包含所有组和图表。在下拉列表中选择后,您可以从第一步调用程序员。

  3. 最棘手的一点 - 我不知道你的计算有多复杂,但可能你想写另一个子程序来处理来自第一个工作表的过滤数据。例程将计算输出到第三个电子表格(如果需要可以隐藏),这样您就可以轻松验证这些值。

    简单的求和/平均/计数等将如下所示:

    GetPositionCount = Application.WorksheetFunction.Subtotal(2, Me.Columns(7))
    

    适用于过滤后的数据。

  4. 最后,您必须将图表连接到计算数据。

  5. 可选步骤,但用户似乎非常亲近。添加另一个按钮,一次打印所有报告。它非常简单 - 只需循环遍历组,显示报告并触发:

    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, To:=1
    
  6. HTH。 (代码取自现实生活中的解决方案,所以希望它有效)