Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 22:32   #1
MrGB
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 32
Вопрос макрос для группировки записей и запись в новые листы по группам

Помогите, пожалуйста, с задачкой:

есть лист с информацией о клиентах: фамилия, код и номер счета.
У одного клиента могут быть много счетов.
Нужно сгруппировать клиентов по количеству счетов и записать информацию о них в листы, названия которых равны количеству счетов (т.е. на лист с названием "1" попадут все клиенты с одним номером счета, "2" - с двумя и так далее. Номера, которых нет пропускаем естественно)
Вложения
Тип файла: rar input_and_output.rar (6.9 Кб, 11 просмотров)
MrGB вне форума Ответить с цитированием
Старый 27.10.2010, 23:36   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Пробуйте.
Если листов нет, то они создаются.
Вложения
Тип файла: rar output.v2.rar (13.6 Кб, 19 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 27.10.2010 в 23:47.
Hugo121 вне форума Ответить с цитированием
Старый 27.10.2010, 23:49   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

У меня к решению таких вопросов всегда один подход.
Вложения
Тип файла: rar input.rar (17.0 Кб, 27 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 28.10.2010, 01:03   #4
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

Предварительно необходимо подключить данну библиотеку: Сервис - Редактор Visual Basic - Tools - References - установите птичку напротив Microsoft ActiveX Data Objects 2.0 Library - OK. Запустите макрос "GroupOnSheets"
Вложения
Тип файла: zip input.zip (13.3 Кб, 15 просмотров)
EugeneS вне форума Ответить с цитированием
Старый 28.10.2010, 09:12   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Внёс поправку - теперь уникальные определяются по коду. В первой версии определялись по фамилии.
Кстати, конкуренты тоже смотрят по фамилии - с меня что-ли списывали?
Вложения
Тип файла: rar output.v3.rar (14.6 Кб, 20 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.10.2010 в 09:19.
Hugo121 вне форума Ответить с цитированием
Старый 28.10.2010, 10:34   #6
MrGB
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Внёс поправку - теперь уникальные определяются по коду. В первой версии определялись по фамилии.
Кстати, конкуренты тоже смотрят по фамилии - с меня что-ли списывали?
спасибо за помощь! вечером скину вознаграждение

я немного переделал - сделал возможность выбора столбца для сортировки и диапазона для копирования.
Вот мои изменения в Вашей функции:
Код:
For Each k In oDict.keys
        ReDim tempArr(1 To UBound(a, 1), 1 To UBound(a, 2))
        x = 0
        For i = 1 To UBound(a)
            If a(i, p_col_sort) = k Then
                x = x + 1
                y = 0
                For z = p_col_b To p_col_e
                    y = y + 1
                    tempArr(x, y) = a(i, z)
                Next
            End If
        Next
        shname = CStr(oDict.Item(k))
        If Not Sh_Exist(shname) Then
            Sheets.Add.Name = shname
            Sheets(p_sheet_name).Range(v_col_b & "1:" & v_col_e & "1").Copy Sheets(shname).Range("A1")
        End If
        Sheets(shname).Range("A" & Sheets(shname).Range("a" & Rows.Count).End(xlUp).Row + 1).Resize(x, UBound(tempArr, 2)).Value = tempArr    
   Next
у меня около 6 тыс. записей - получается медленно - примерно 20 сек. Нельзя ли как-нибудь побыстрее?
MrGB вне форума Ответить с цитированием
Старый 28.10.2010, 10:39   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Нельзя ли как-нибудь побыстрее?
Можно попробовать не копировать диапазоны в цикле, а накапливать массивы, а затем, после окончания цикла, "раскидать полученные массивы по требуемым листам.
Должно быть быстрее.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 28.10.2010, 10:51   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Нда, с накоплением в массив сложнее... Если заранее известно максимальное количество счетов, то можно заготовить столько массивов и набирать в них, но сейчас в коде это количество не ограничено.
Может варианты на ADO побыстрее будут? Только вот как на номера счетов переделать - это к авторам.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.10.2010, 10:58   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Может переделать код таким образом - набирать номера в словарь или коллекцию, а как Item иметь массив строк по этому номеру, куда динамически добавлять записи.
Потом в конце как-то это всё обобщить...
Я так ещё не делал, так что ничего не обещаю.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.10.2010, 10:58   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Может варианты на ADO побыстрее будут? Только вот как на номера счетов переделать - это к авторам.
Роли не играет по фамилиям или счетам.ТС я так понял не заинтересовали эти варианты,не привел время выполнения макроса.
ускорить немного можно если нужно.

Цитата:
Кстати, конкуренты тоже смотрят по фамилии - с меня что-ли списывали?
.
Так удобнее выводить список фамилий по алфавиту
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос импорта Ексель файлов из папки в листы одной книги с последующим выполнения макросов.СПБ. as-is Microsoft Office Excel 17 17.12.2018 22:37
Макрос для изменения записей trattaturen Microsoft Office Access 4 02.10.2010 13:22
Новый двухкнопочный калькулятор для новой операционной системы. Пишем новые программы для BolgenOS. Ecosasha Софт 16 06.06.2010 13:32
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос as-is Microsoft Office Excel 4 25.02.2010 07:51
Ребят, помогите прогу сделать для авто-группировки таблиц dbf HIC БД в Delphi 6 22.06.2007 14:37