Способы работы с произвольно большими наборами произвольного числа элементов в Excel - PullRequest
0 голосов
/ 07 мая 2009

Я имею в виду конкретный случай, но вопрос применим и в целом. Как вы имеете дело с данными в Excel, когда объем данных является произвольным?

В моем конкретном случае у меня есть программа, которая генерирует от 1 до 10 наборов данных, каждый из которых состоит из 5 произвольно (но одинаково) длинных массивов (или вы можете считать это таблицей с 5 столбцами). Я хотел бы иметь возможность выгружать эти данные в Excel, применять к ним именованные диапазоны (этого я уже сделал), а затем манипулировать ими в Excel для создания отчета. В идеале я хотел бы сделать это с как можно меньшим количеством VBA (ни один из них не будет лучшим). Идея заключается в том, что конечные пользователи этих отчетов должны иметь возможность изменять формат (или создавать новый отчет с теми же данными), не меняя свою программу.

По сути, отчеты должны быть примерно 1-10 таблицами, с одной строкой для каждого элемента в 5 массивах (столбец для каждого массива).

Надеюсь, этот пример прояснит, о чем я спрашиваю. Какие возможности предоставляет вам Excel для работы с данными в таких произвольных количествах, помимо кодирования всей этой чертовщины в VBA?

Ответы [ 3 ]

1 голос
/ 10 мая 2009

Я не уверен, что понимаю «и затем манипулирую им в Excel для создания отчета» именно так, как я могу представить множество разнородных способов создания отчетов в Excel, но у меня есть предложение, которое может поразить вас (Я бы оставил комментарий с уточняющими вопросами, но, увы, моя репутация все еще слишком мала!). Если вам нужны пояснения / пример кода, дайте мне знать, и я буду рад вам помочь.

Поскольку у вас уже есть именованные диапазоны, вы можете использовать queryTable / listObject, который фактически указывает на другой лист в той же книге. При этом используется DSN для файлов Excel (через ODBC, и он должен быть на всех рабочих станциях с Excel), и я несколько раз использовал этот прием для работы с переменными данными, о которых мне нужно было сообщать. Как это сделать, зависит от используемой версии Excel. Я сейчас запускаю 2007, поэтому для этого нужно указать «Вкладка данных / Из других источников / Из запроса Microsoft», выбрать «Файлы Excel», перейти к своему файлу (возможно, вам придется сначала сохранить, так как это тот же, в котором вы находитесь) и выберите именованный диапазон, который вы ищете. Если вы знакомы с MS Query, это должно быть прямо оттуда.

Теперь DSN для новой таблицы запросов будет иметь жестко запрограммированную ссылку на книгу в строке подключения. Чтобы обновить это, вам понадобится немного кода VBA в событии workbook_open. Это должно выглядеть примерно так:

Sub Workbook_Open()
   Dim MyLocation as String
   MyLocation = ThisWorkbook.Path & "\" ThisWorkbook.Name
   Sheet1.ListObjects(1).queryTable.ConnectionString = _
         "ODBC;DSN=Excel Files;DBQ=" & _
         MyLocation & ";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
End Sub

Очевидно, что с несколькими запросами вам нужно будет выполнить несколько For Eaching, но в этом суть. Дайте мне знать, если это то, что вы ищете, и я могу дать вам более подробное объяснение преимуществ, подхода, примеров кода для создания запросов (вместо того, чтобы делать их вручную с помощью MSQuery), различные направления для других версий и т. д.

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

1 голос
/ 08 мая 2009

Вы можете поместить все данные из всех наборов данных в один большой диапазон на одном листе. Вы также можете иметь столбец, определяющий, какой набор данных пришел из конкретной строки

Для составления отчетов, если вам необходимо обобщить некоторые аспекты данных, тогда сводная таблица (в меню «Данные») является логичным выбором. Вы можете использовать столбец набора данных в качестве поля страницы в сводной таблице, чтобы каждый набор данных мог отображаться в отдельном отчете

Если вам необходимо отфильтровать наборы данных перед созданием отчетов, вы также можете использовать расширенный фильтр (также в меню «Данные»), чтобы отфильтровать соответствующие записи на новом листе. Затем вы можете сгенерировать сводные таблицы из этого нового листа

Есть несколько факторов риска:

  • размер наборов данных может превышать максимальное количество строк на листе (1 048 576 в Excel 2007; 65 536 в Excel 2003)
  • количество различных значений в данном поле может превышать количество, которое можно суммировать в сводной таблице (1 048 576 в Excel 2007; 32 500 в Excel 2003)
  • пользователи могут найти расширенный фильтр и / или сводную таблицу слишком сложными для использования

Если ваши данные могут превысить какой-либо из максимальных размеров, то Excel вряд ли будет подходящей программой для этих данных (кроме как в качестве внешнего интерфейса для какой-либо базы данных)

0 голосов
/ 14 мая 2009

Это потенциально может быть полезно:

http://www.exceluser.com/solutions/variablelists_xl12.htm

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...