|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.04.2010, 12:26 | #1 |
Регистрация: 12.04.2010
Сообщений: 8
|
Автоматизации сортировки данных. Какие варианты?
Добрый день!
Сам я не программист, только начал изучать VB (в связи с обстоятельствами на работе). Однако у меня есть одна гигантская проблема - необходимо автоматизировать сортировку и получение результата по определенной группе данных. На одном листе экселя имеются порядка 70000-100000 записей (каждый день варьируются): Столбец А содержит в себе повторяющиеся значения, которым соотвествуют по 2 значения (в столбцах B и С) Требуется: Для каждого уникального значения в столбце А подсчитать сумму всех его значений в столбцах B и С. В примере на листе я показал как я решаю эту проблему вручную (увы, макросы мне тут не помощники: так как данные каждый день новые и колличество уникальных значений каждый раз разное) Понимаю, что все это вероятно делается через массивы, но пока еще не горазд написать код, так как не особо представляю даже как данные в массив из ячеек загнать |
12.04.2010, 12:37 | #2 |
Форумчанин
Регистрация: 13.01.2010
Сообщений: 410
|
то есть для наглядности необходимо было выдавать файл на 80 тыщ строк?
Что надо в итоге получить я так и не понял. |
12.04.2010, 12:49 | #3 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Посмотрите пример макроса в файле: Вот код основной функции: Код:
|
|
12.04.2010, 12:51 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
А вот, собственно, та самая функция, которая оставляет в массиве только уникальные значения в нужном столбце, попутно суммируя значения в других, выбранных пользователем, столбцах:
Код:
|
12.04.2010, 12:51 | #5 | |
Регистрация: 12.04.2010
Сообщений: 8
|
Цитата:
Данные в столбцах А:С - есть исходные Столбцы L:M - содержат результат ручной обработки данных Пример ручной обработки (обычно в день у меня занимает по 1,5-2 часа) находится в столбцах О:S Алгоритм следующий: данные в столбце А повторяются, им соответствуют пара данных из столбца В и С. Я сортирую данные диапазона А:С по столбцу А. В итоге получаю набор блоков со сгруппированными значениями в столбце А и соответствующие им значения по В и С. И для каждого блока суммирую эти значения (В + С). В итоге получаю сводную таблицу по примеру L:М Последний раз редактировалось Nomercy; 12.04.2010 в 13:03. |
|
12.04.2010, 12:56 | #6 |
Регистрация: 12.04.2010
Сообщений: 8
|
EducatedFool, большое спасибо за отклик.
Сейчас попробую. У меня попутно вопрос для самообразования, почему макросы выгоднее в обработке большого объёма данных нежели использование массивов? П.С. EducatedFool, просто невероятная штука!!!!!!! Гигантское спасибоооо)) Еще больше подстегнуло к изучению програмирования)) Не думал что код размером в несколько десятков строк так эффективен Последний раз редактировалось Nomercy; 12.04.2010 в 13:03. |
12.04.2010, 13:03 | #7 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Мой макрос как раз и использует массивы. Как вы намереваетесь использовать массивы без макроса? Если речь про формулы массива, то при таком объёме данных любые формулы начнут тормозить при пересчёте. Поэтому оптимальнее использовать макросы. Если бы количество строк исчислялось не десятками тысяч, а сотнями, можно было бы попробовать использовать формулы. |
|
12.04.2010, 13:29 | #8 |
Регистрация: 12.04.2010
Сообщений: 8
|
Наверно я написал какую то глупость. Пойду учить матчасть
П.С: После беглого прочтения нескольких книг по VBA (в основном для чайников) я подумал что из данных необходимо сформировать двумерный массив . А затем внутри этого массива произвести обработку этих данных согласно необходимого алгоритма. Потом из полученных данных сформировать новый массив и выгрузить его на лист. Просто я думал что макросы не могут содержать в себе переменные или массивы. Вобщем сажусь учить VBA, а то ща всякого бреда тут наговорю)) |
12.04.2010, 14:21 | #9 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Только обработка двумерного массива вынесена в отдельную процедуру JoinedArray (которая более универсальна, чем требуется в данном случае) Можно, конечно, намного сократить код, убрав лишние циклы и проверки, вплоть до полного переписывания функции под ваши нужды Тем самым можно увеличить скорость выполнения кода. Но это уже предстоит вам сделать самостоятельно - я лишь показал пример. |
|
12.04.2010, 14:39 | #10 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
а может сводная таблица с этим справится? попробуйте...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ищу CRM решение/базу данных/учен клиентов/ рассмотрю варианты | Transfers_Kiev | Софт | 1 | 26.04.2012 11:19 |
Алгоритмы сортировки обмена данных | sid1868 | Общие вопросы C/C++ | 1 | 30.03.2010 21:42 |
Варианты поиска значений из массива данных | PARTOS | Microsoft Office Excel | 14 | 11.01.2010 14:20 |
Написать прогу для автоматизации ввода данных | vitaleg | Свободное общение | 17 | 29.07.2009 12:54 |
Помощь в автоматизации сортировки | PioneerVRN | Microsoft Office Access | 0 | 23.06.2009 19:12 |