Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Удаление строк

Автор temask, 27.01.2013, 01:26

« назад - далее »

temask

Раньше скрипт работал. Сейчас база более 10к строк, работать перестал.

У меня проблема со скриптом. Он должен (и работал когда-то) делать следующее:
на первой странице у меня в каждой строчке айпи адреса и данные от них.
на стором листе я скидывал обычно в каждую новую строчку айпишки и/или полные адреса
нажимал выполнить макрос и на первом листе он искал данные айпи (если айпи указаны то удалял все сервера из столбца А, даже если разные данные указаны) и сервера и удалял их.
удалял так же их со второго листа и переключался на первый.
Удалял именно строчки целиком (т.к. другие столбы по серверам информацию содержали и должны удаляться были вместе)

Теперь более наглядно.
Столбец А (по которому и идет удаление) листа1 обычно содержал данные по маске
ip@someinfo;someinfo2
ip@someinfo;
На второй лист я мог кинуть как ip, так и ip@someinfo; или ip@someinfo;someinfo. Скрипт искал значения и удалял строчки на листе 1, удалял все после с листа 2 и возращал меня на лист1.
Если указаны только ip на листе2, то он искал все эти ip на первом в столбце А и удалял. Т.е. к примеру указал 10.10.10.10, то удалялись все 10.10.10.10@someinfo; и 10.10.10.10@randomword;anyword
Если же закинуты были на второй лист ip@someinfo то искался именно такой на первом, аналогично и для ip@some;someinfo2

ip - ipv4 адрес вида xxx.yyy.zzz.mmm (конечно же он мог быть как 1.1.1.1 так и 255.255.255.255 - имею ввиду количество цифр, но шаблон един).
someinfo - переменная, могла быть любой. разделялась точкой с запятой справа и слева собачкой.
someinfo2 - переменная, могла быть любой. слева отделялась от someinfo точкой с запятой, справа - ничего не ставилось. могла быть пустой (т.е. после someinfo; могло быть пусто)

Sub Удаление_исключений()
Dim iz As Worksheet
Set iz = ThisWorkbook.Worksheets(1)
Worksheets(1).Activate
r = 1
While Worksheets(2).Cells(r, 1).Value <> ""
    t = 2
    While Worksheets(1).Cells(t, 1).Value <> ""
        If Worksheets(2).Cells(r, 1).Value = Left(Worksheets(1).Cells(t, 1).Value, Len(Worksheets(2).Cells(r, 1).Value)) Then
            Worksheets(1).Rows(t).Delete Shift:=xlUp
            t = t - 1
        End If
    t = t + 1
    Wend
r = r + 1
Wend
Worksheets(2).Activate
Worksheets(2).UsedRange.Clear
Worksheets(1).Activate
End Sub


http://rghost.ru/private/43284726/cd1dbb33db285407ff2341520bc356c3

sergo44441

Добрый вечер. Из вашего рассказа и файла с примером не совсем понятен момент, при каких искомых значениях макрос не выдает желаемый результат? разместите файл с указанием этих значений.
Не торопись, и все успеешь намного быстрее

temask

#2
Все работало. Но как только количество строк перевалило за 7к - перестало удалять. Полагаю проблема в количестве строк.
У меня два предположения: либо из-за количества строк глюк, либо с кодом глюк. Потестирую, выложу файл.

Цитироватьпри каких искомых значениях макрос не выдает желаемый результат
Проблема в том, что макрос работал. В один момент курсор начинает меняться на "работающий", но ничего не удаляется. Вставлял как обычно в перемешку, и айпи, и айпи с данными.

sergo44441

попробуйте такой макрос попробовать. Чуть его оптимизировал.
Не торопись, и все успеешь намного быстрее

temask

Цитата: sergo44441 от 31.01.2013, 00:49
попробуйте такой макрос попробовать. Чуть его оптимизировал.
Пример не помог, но вы натолкнули меня на решение, проблема решена!
Как я и писал (или думал по крайней мере), у меня перестал скрипт работать после увеличения количества строк. Я думал, что проблема в этом, и частично оказался прав. Я стал удалять строки. В итоге после 4300 у меня скрипт заработал. Я добавил 500 строк обратно - перестал. В итоге пробежавшись по данным, я заметил, что есть пустая строчка (видимо случайно вставилась или данные потерлись через del, а не удалением строки). Удалив ее - все заработало!