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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2009, 11:26   #11
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

а просто автофильтром не годится?

выделить все значения содержащие "х" - удалить видимые строки

две строки(ну 3) кода, нет?
slan вне форума Ответить с цитированием
Старый 05.02.2009, 11:46   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

slan
+1 !!!!

Код:
Sub Del()

    Application.ScreenUpdating = False
    Rows(1).Insert: [A1] = "ServiceValue"
    ActiveSheet.UsedRange.AutoFilter Field:=1, Criteria1:="x"
    Cells.SpecialCells(xlCellTypeVisible).Delete
    ActiveSheet.AutoFilterMode = False
    
End Sub
Добавляется первая строка с сервисным значением т.к. автофильтр первую строку считает заголовком и всегда оставляет видимой (эта строка затем удаляется).
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 06.02.2009 в 05:46.
SAS888 вне форума Ответить с цитированием
Старый 10.09.2009, 13:46   #13
pdoktor
Новичок
Джуниор
 
Регистрация: 10.09.2009
Сообщений: 2
По умолчанию помогло, спасибо и респектос)

понастроил под свою задачку,
работает отлично! спасибо!!!

но нужно чтоб он из внешнего файла брал
чистил его и сохранял

я чё то почитал, нашёл тока как через переменную диапазон это делать, но
чёто зависаетмин на 5 и потом тока снимать задачу

помогите пжлста!
дайте код как работать с внешним файлом
вот мой код

Private Sub Clear_Click()

Set Sheet = ActiveSheet ' объект Sheet - это обрабатываемый лист Excel
For Each Row In Sheet.UsedRange.Rows
If Row.Cells(1) < 5000 Then
Else: Row.delete
End If
Next

End Sub
pdoktor вне форума Ответить с цитированием
Старый 10.09.2009, 14:19   #14
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

По Вашему коду видно, что просматриваются только ячейки 1-го столбца. Так и нужно?
При использовании цикла For...Next при проходе сверху вниз при удалении строки будет нарушаться счетчик цикла. Можно либо формировать (не удалять сразу) диапазон, а по окончании цикла удалять его. Либо, проходить снизу вверх. Например, так:
Код:
Sub Clear_Click()
    Dim i As Long: Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If Cells(i, 1) > 5000 Then Rows(i).Delete
    Next
End Sub
P.S. Зачем Вы пишите
Цитата:
If Row.Cells(1) < 5000 Then Else: Row.delete
Ведь это то же самое, что и If Row.Cells(1) > 5000 Then Row.delete

P.P.S Правила форума: новый вопрос - новая тема!!!
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 10.09.2009, 15:40   #15
pdoktor
Новичок
Джуниор
 
Регистрация: 10.09.2009
Сообщений: 2
По умолчанию

[QUOTE=SAS888;341031]По Вашему коду видно, что просматриваются только ячейки 1-го столбца. Так и нужно?
При использовании цикла For...Next при проходе сверху вниз при удалении строки будет нарушаться счетчик цикла. Можно либо формировать (не удалять сразу) диапазон, а по окончании цикла удалять его. Либо, проходить снизу вверх. Например, так:
Код:
Sub Clear_Click()
    Dim i As Long: Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If Cells(i, 1) > 5000 Then Rows(i).Delete
    Next
End Sub
P.S. Зачем Вы пишите Ведь это то же самое, что и If Row.Cells(1) > 5000 Then Row.delete


потому что мне нужно было удалять ячейки и с текстом тоже)

а ваш код работает значительно лучше) и быстрее

а к нему я так понял несложно подкрутить указание внешнего файла



Dim i As Long: Application.ScreenUpdating = False
'добавляя новый код
Workbooks("список магазинов.xls").Sheets ("список магазинов")
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1) > 5000 Then Rows(i).Delete
Next


но так не работает
если делать это файл активным (.activate) тоже не пашет((
помогайте гуру!
pdoktor вне форума Ответить с цитированием
Старый 11.09.2009, 04:41   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Например, так:
Код:
Sub Clear_Click()
    Dim i As Long: Application.ScreenUpdating = False
    With Workbooks("список магазинов.xls").Sheets("список магазинов")
        For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
            If .Cells(i, 1) > 5000 Then .Rows(i).Delete
        Next
    End With
End Sub
Хотя, если перед применением предыдущего кода выполнить
Код:
Workbooks("список магазинов.xls").Sheets("список магазинов").Activate
то все должно было работать как надо.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 11.09.2009 в 04:43.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel. как удалить из таблицы все гиперссылки? и запретить что бы URL ими становились 9go Microsoft Office Excel 2 17.01.2009 10:19
Удалить из строки S1 первую, последнюю, все подстроки совпадающие с S2 ТРОЯН=) Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2008 23:28
Удалить из строки все группы букв вида abcd Григорийpnz Паскаль, Turbo Pascal, PascalABC.NET 5 27.11.2008 12:48
Удалить из строки все группы вида abcd Григорийpnz Паскаль, Turbo Pascal, PascalABC.NET 8 18.11.2008 19:40
Надо в RichEdit Удалить все строки между двумя пустыми Stas))) Компоненты Delphi 7 28.05.2007 16:49