Страницы: 1
RSS
Макрос, оставляющий строки по наличию определённых кодов
 
Здравствуйте! Помогите, пожалуйста, с макросом под следующую задачу для Excel 2003.
Есть много баз данных по типу той, что в приложенном файле. Один файл - один месяц, в каждом порядка 2000 строк. Требуется макрос, чтобы из всего массива формировалась выборка строк по наличию определённых кодов, находящихся в столбце А. Желаемый результат приведён на закладке "ИТОГ". Таким образом, в данном примере искомые коды - IPI, 0000, 0107, 0304, 2264, 0449. Но в конечном результате таких кодов будет около 40. Все коды - некий постоянный набор (словарь) для всех файлов. Кроме строк с кодами нужно вывести названия полей (фамилии), находящиеся в столбце B, но только если искомый код находится в поле под этой фамилией. Остальное удаляется.
Есть особенность - надо сохранить форматирование этих самых кодов, которые иногда начинаются с цифры "ноль". Названия листов с данными для каждого файла свои, но именованы по шаблону с датой.
 
Цитата
нужно вывести названия полей (фамилии), находящиеся в столбце B
А каким образом Сидоров С.С. оказался в строке 7 листа ИТОГ?
 
Потому что в поле "Сидоров С.С." были два искомых кода - 2264 и 0449.
 
Цитата
но только если искомый код находится в поле под этой фамилией
Код у вас в столбце А, а фамилии в столбце В.
И где это поле под этой фамилией?
 
В том-то и дело, что именно такая "закавыка" - фамилии в столбце B.
Поле имелось в виду - от одной фамилии до другой фамилии.
 
Подсказали мне код. Работает, но, конечно, не мгновенно на имеющихся файлах в 2000 строк. Но работает. Надо лишь создать список ключевых слов-исключений на отдельном листе. Если кому нужно:
Код
Sub DeleteUnwantedContent()
  Dim rg As Range, frg As Range, r%
  r = 2:  Set frg = Range(Good.Cells(1, 1), Good.Cells(Rows.Count, 1).End(xlUp))
  Do While Not IsEmpty(Cells(r, 2))
    Set rg = frg.Find(Cells(r, 2), frg.Cells(1), xlValues, xlWhole)
    If rg Is Nothing Then Rows(r).Delete Else r = r + 1
  Loop
End Sub
Изменено: dcbug - 12.10.2018 23:33:50
 
Скрытый текст
Изменено: JayBhagavan - 13.10.2018 12:16:04

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Не работает на Excel 2003, к сожалению.
Ругается на 53-ю строку, xlSortOnValues: Compile error: Variable not defined
Цитата
Сообщение "Compile error: Variable not defined" при попытке запустить  выполнение кода VBA говорит о том, что происходит попытка использовать  или обратиться к переменной, которая не была объявлена для текущей  области (такая ошибка может возникнуть только если используется Option  Explicit).
Погуглил, пишут, что такой код будет работать на Excel 2007 и новее.
 
dcbug, точно. Шас переделаю...
Переделал.
Изменено: JayBhagavan - 13.10.2018 12:16:45

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Работает отлично!
В отличие от того маленького макроса, что в сообщении №6, Ваш код работает практически мгновенно!
Спасибо!
Изменено: dcbug - 15.10.2018 21:27:17
 
JayBhagavan, я прошу меня извинить, если Вас не затруднит, можно ли немного переделать код, чтобы удалилось несколько лишних строк и вся таблица повернулась, как на закладке "Надо" прилагаемого файла? Сам я слишком тёмен для этого.
Заранее спасибо!
 
dcbug, видать Вы собираетесь кулеш/кашу из топора сварить.
Можно всё, но, вот, только у меня охоты нет, т.к. с Вашей стороны не видно никаких попыток самостоятельно код подправить.
Либо обратитесь в раздел "Работа".
Предвижу следующую "хотелку": чтобы макрос сам все файлы по указанному пути (и возможно по определённой маске) пакетно обрабатывал.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Наверх