Исключение дубликатов строк.jpg

http://avoropay.ucoz.ru/publ/4-1-0-9

Программа работает таким образом. Запускаем программу, нажимаем кнопку "Загрузить Excel файл" и выбираем файл для обработки.

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

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

Так же можно выбрать какой лист книги будем обрабатывать.

Затем нажимаем кнопку "Обработаем файл" и ждем 3 часа:). Кнопкой "Остановка обработки" можно прекратить цикл обработки, при этом промежуточные результаты можно сохранить.

Во время обработки программа отображает 2 индикатора процесса. Первый это строки, второй это колонки. Так же отображается реальное затраченное время и усредненное время работы. Индикаторы обновляются через каждые 50 строк.

Как работает программа:

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

2. Для каждого столбца организовываем цикл по всем строкам, начиная от начальной строки данных+1 (пропускаем заголовок).

3. Для каждой ячейки пытаемся разделить значения через запятую. И для каждого полученного значения производим поиск, только в диапазоне - "Текущая ячейка + 1" до последней строки.

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

5. Потом добавляем ACM номер через запятую в эталонную строку.

6. Поиск производим до того момента как найдем все значения по текущей колонке, для эталонной строки.

7. Колонки помеченные как дубликаты, повторно не обрабатываются.

Оптимизировал, при работе с Excel VBA работает намного дольше. Все равно работает долговато, но обработка насчитывает в себе порядка 5 млн. операций, это много....

Лучший вариант был бы, загрузить данные из таблицы в БД, обработать их при помощи SQL запросов, затем опять выгрузить в Excel, думаю работать будет около получаса.... не больше.