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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2013, 02:42   #1
Alw
 
Регистрация: 15.03.2013
Сообщений: 3
Сообщение (excel_2010_VBA)Поиск и замена ячеек по условиям ячейками из другого файла.

Добрый день, прошу помочь в написании макроса:
Есть два длинных файла Файл1 и Файл2 (txt) примерно 600000 строк, открывать, добавлять и сохранять с помощью VBA я их научился,
но вот обновить Файл1 файлом Файл2.
Задача:
найти в столбце Файл2 ячейку такого вида:
A_name=* ,где *-соответственно произвольное количество символов
найти её в Файл1 столбце
спуститься на +1 ячейку вниз и
если она №ячейки+1(Файл1) "не полностью совпадает" с №ячейки+1(Файл2),
тогда +9 ячеек от №ячейки+1(Файл1) и замена следующих 6 ячеек подряд из Файл2 от №ячейки+1(Файл2) +9ячеек,
иначе замена 15 ячеек подряд вниз №ячейки+1(Файл1) взятых из Файл2 от №ячейки+1(Файл2). Так пройтись по всему столбцу Файл2.
Т.е. два файла представляют собой "блоки" с именами "A_name=*" идущие друг за другом с одинаковым количеством строк,
но порядок их(блоков) в файле бывает произвольный.
Заранее спасибо откликнувшимся!
Alw вне форума Ответить с цитированием
Старый 15.03.2013, 04:15   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Сделать-то вроде несложно, но... 600 тыс строк - это очень много
Столько сравнений, поиска, и т.д. — займут ОЧЕНЬ много времени.


Я бы посоветовал читать файл (точнее, оба файла одновременно) построчно,
формируя 2 массива по 40 тыс. блоков

потом на основе этих 2 массивов создать ещё 2 массива размерами 40000 строк * 2 столбца, куда поместить A_name=* и значения ячейки снизу

после чего искать совпадения в 2 этих маленьких массивах 40000*2,
и когда совпадение найдено, менять данные в «большом» массиве 40000*1

Когда все замены произведены, склеиваем обработанный массив из 40000 блоков в одну текстовую строку (функцией join), и записываете получившуюся текстовую строку в файл.

Это позволит заметно ускорить процесс сравнения и поиска,
и сократит время обработки данных до 20-200 секунд
EducatedFool вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и замена файла Shur1k_ua Фриланс 1 30.05.2012 00:21
Массовый поиски и замена по шаблону из другого файла. wadimko97 Microsoft Office Excel 1 27.10.2011 13:51
Чтение ячеек из другого .xls файла в переменные MasterYod@ Microsoft Office Excel 2 12.05.2010 11:32
Поиск ячеек в книге, совпадающих с ячейками в столбце А, листа1 данной книги TiG Microsoft Office Excel 1 10.12.2009 19:32
Подсчёт ячеек по условиям Feniks18 Microsoft Office Excel 2 16.07.2009 16:26