Как создать несколько диаграмм / отчетов для 1 отфильтрованного набора необработанных данных в Excel? - PullRequest
0 голосов
/ 26 августа 2011

Я делаю набор отчетов для своей работы в Excel 2007.
Мне дали набор необработанных данных, которые организованы в одну таблицу Excel.Эти необработанные данные будут меняться, поэтому отчеты, которые я пытаюсь сделать, должны позволять это.Мне также дали набор шаблонов диаграмм.Они должны использоваться для отражения результатов из 22 различных групп в моих исходных данных, отдельно.Для каждой группы диаграммы одинаковы, но для каждой группы должен быть создан новый рабочий лист (с набором диаграмм).

Я потратил много времени, пытаясь сделать это, и я думаю, что поступаю неправильно.Это сводка макроса, который я сделал, который близок к тому, чтобы дать мне конечный результат (который я в итоге скопировал и вставил для всех групп).

  1. Фильтрация необработанных данных только для группы.
  2. Скопируйте весь лист.
  3. Вставьте на другой лист только как значения.(это дает мне ошибку при использовании слишком большого количества ресурсов)

Итак, теперь для каждой группы у меня есть лист диаграммы и лист с копированными результатами фильтра.Затем я сделал третий лист для данных диаграммы.На этом листе есть много формул, которые запускают вычисления для отфильтрованных данных для каждой диаграммы.Диаграммы ссылаются на них.

Это действительно самый простой способ сделать что-то подобное?Было много работы, чтобы скопировать макрос для каждой группы.Присвойте данные каждому графику для каждой группы.Кроме того, у меня сейчас 67 рабочих листов.Это сводные таблицы могли бы сделать намного проще?

1 Ответ

0 голосов
/ 26 августа 2011

Я предполагаю, что группы предопределены?Если это так, я бы создал динамические таблицы.

  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
    

HTH.(Код взят из реального решения, так что, надеюсь, оно работает)

...