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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2011, 23:48   #11
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Ошибки можно выделить без автофильтра:
Код:
Sub DelErr()
On Error Resume Next
With Range("B:B")
    .SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
    .SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Delete
End With
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 13.07.2011, 12:06   #12
lakmuss
 
Регистрация: 14.06.2011
Сообщений: 6
По умолчанию

Спасибо, но оказалось всё несколько сложней:

Необходимо если в первом значении значение "k" проверить на ошибке один столбец,
а если значение не "k" то проверить на ошибки значения другого столбца.

Можете, пожалуйста, добавить такое условие.

EducatedFool И еще вот такой вопрос: использую Ваш макрос по удалению строки по нескольким условиям столбца - строк 2000, условий пока 15, но может быть добавлено еще. Проверка и удаление занимает порядка 5 минут, может даже больше. Это так и должно быть или у меня что-то не так?
Просто у меня дальше по результатам данной базы идет множество вычислений, но автоматический пересчет формул отключен, поэтому не могу понять то ли макрос так долго выполняется, то ли мои вычисления его тормозят.

Спасибо

Последний раз редактировалось lakmuss; 13.07.2011 в 12:08.
lakmuss вне форума Ответить с цитированием
Старый 13.07.2011, 12:15   #13
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Можете, пожалуйста, добавить такое условие.
Тут не форум телепатов, да и воссоздавать ваш файл, чтобы проверить макрос, тоже желания особого нет.
В правилах раздела рекомендовано прикреплять пример файла, если хотите получить ответ.

Цитата:
Проверка и удаление занимает порядка 5 минут, может даже больше. Это так и должно быть или у меня что-то не так?
Дело в том, что на сайте у меня выложено НЕСКОЛЬКО разных макросов удаления строк по условиям (см. комментарии к этой статье)

Который из макросов вы используете?

Если тот, который содержит строку
Код:
If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
- то 5 минут это слишком долго (разве что в таблице тысячи столбцов)
Этот код должен отрабатывать за пару секунд.

Если же вы используете что-то вроде этого (цикл)
Код:
Sub УдалениеСтрокСОбъединённымиЯчейками()
    Application.ScreenUpdating = False    ' отключаем обновление экрана
   On Error Resume Next    ' отключаем остановку при ошибке

    ТекстДляПоиска = "Наименование ценности"    ' удаляем строки с таким текстом

    Do ' повторяем, пока есть ячейки с заданным текстом
       ActiveSheet.UsedRange.Find(ТекстДляПоиска, , xlValues, xlPart).MergeArea.EntireRow.Delete
    Loop Until Err ' если возникла ошибка (ячейка не найдена) - останавливаемся
End Sub
то 5 минут - это нормальный результат.

Задержка вызвана этим:
Код:
    ' перебираем все строки в используемом диапазоне листа
   For Each ra In ActiveSheet.UsedRange.Rows
Перебираются ВСЕ столбцы - а вам, скорее всего, проверку достаточно производить только в некоторых столбцах

Последний раз редактировалось EducatedFool; 13.07.2011 в 12:20.
EducatedFool вне форума Ответить с цитированием
Старый 13.07.2011, 14:29   #14
lakmuss
 
Регистрация: 14.06.2011
Сообщений: 6
По умолчанию

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

Макрос - УдалитьсОшибкой

Цитата:
Задержка вызвана этим:
Код:

' перебираем все строки в используемом диапазоне листа
For Each ra In ActiveSheet.UsedRange.Rows

Перебираются ВСЕ столбцы - а вам, скорее всего, проверку достаточно производить только в некоторых столбцах
Заменил на значение только одного столбца, но как мне кажется теперь оно проверяет весь столбец, аж до конца ВСЕХ ВСЕХ строк Excel поэтому и так долго.

Макрос - УдалениеСтрокПоНесколькимУсловиям
Вложения
Тип файла: rar Пример.rar (25.0 Кб, 21 просмотров)
lakmuss вне форума Ответить с цитированием
Старый 22.07.2011, 16:59   #15
lakmuss
 
Регистрация: 14.06.2011
Сообщений: 6
По умолчанию

никто не знает?
lakmuss вне форума Ответить с цитированием
Старый 22.07.2011, 19:11   #16
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Вот так попробуйте:
Код:
Sub ertert()
Application.ScreenUpdating = False
On Error Resume Next
With [a1].CurrentRegion
    .AutoFilter Field:=1, Criteria1:="k"
    With .Columns(6).SpecialCells(12)
        If .Count > 1 Then .SpecialCells(-4123, 16).EntireRow.Delete
    End With
    .AutoFilter Field:=1, Criteria1:="<>k"
    With .Columns(7).SpecialCells(12)
        If .Count > 1 Then .SpecialCells(-4123, 16).EntireRow.Delete
    End With
    .AutoFilter
End With
Application.ScreenUpdating = True
End Sub
nilem вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пустых строк в таблице Semen90 Microsoft Office Word 24 14.07.2022 12:28
Удаление одинаковых строк на листе Excel 2003 vfv Microsoft Office Excel 26 21.11.2014 12:58
Добавление (удаление) строк в таблице inside9 Microsoft Office Excel 29 01.01.2012 22:31
Удаление ненужных строк в Excel djbub14 Microsoft Office Excel 3 16.08.2010 07:03
Удаление строк в таблице maksim_serg Microsoft Office Word 5 30.04.2010 13:18