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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2012, 12:09   #1
Zelenaya
 
Регистрация: 25.09.2012
Сообщений: 4
По умолчанию Удаление строк

Всем добрый день. Немного запутался. Вопрос в следующем.
У меня есть таблица, размером допустим в 100 строк. Из них штук 8 заполненых, остальные нужно удалить. Что делаю я

Цитата:
ActiveCell.SpecialCells(xlLastCell) .Select
Last = ActiveCell.Row
Set Rng = Nothing
For i2 = 9 To Last
If CurWks.Cells.Item(i2, 2 + NewForm) = "" Then
Set Rng = Union(Rng, CurWks.Rows(i2))
End If
Next i2
Rng.Select
Selection.EntireRow.Delete
где CurWks это текущий лист.
Проблема в строчке 'Set Rng = Union(Rng, CurWks.Rows(i2)), говорит Ivalid Procedure call, что я делаю не так?

Ну и для моего понимания.

Цитата:
for i = 1 to 100
..
rows(i).delete
..
next i
Если у меня есть цикл, где i меняется от 1 до 100, которым я перебираю номер строк в листе, то при удалении строки rows(i).delete, следующая строка не будет проверена в цикле, ведь i=i+1, соот-но книга сократится и общее кол-во строк станет на 1 меньше? Каким способом тогда проще всего удалять ненужные даные в книге?
Zelenaya вне форума Ответить с цитированием
Старый 25.09.2012, 12:45   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Код:
Sub qq()
    Application.ScreenUpdating = False
    For i2 = CurWks.Cells(Rows.Count, 2 + NewForm).End(xlUp).Row To 9 Step -1
        If CurWks.Cells(i2, 2 + NewForm) = "" Then CurWks.Rows(i2).Delete
    Next
End Sub
Но можно обойтись и без цикла:
Код:
On Error Resume Next
Intersect(CurWks.Rows("9:" & Rows.Count), CurWks.Columns(2 + NewForm).SpecialCells(xlCellTypeBlanks).EntireRow).Delete
On Error GoTo 0
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 25.09.2012 в 13:01.
SAS888 вне форума Ответить с цитированием
Старый 25.09.2012, 13:26   #3
Zelenaya
 
Регистрация: 25.09.2012
Сообщений: 4
По умолчанию

Ух ты, круто. Буду смотреть ближе к вечеру, спосибо!
Zelenaya вне форума Ответить с цитированием
Старый 26.09.2012, 08:18   #4
Zelenaya
 
Регистрация: 25.09.2012
Сообщений: 4
По умолчанию

не могу понять чем это
For i2 = CurWks.Cells(Rows.Count, 2 + NewForm).End(xlUp).Row To 9 Step -1
отличается от допустим этого
For i2 = CurWks.Rows.Count to 9 Step - 1

В частности не понятно End(xlUp).Row, что это?
Я с этим сталкивался, когда на просторах нашел что то типа Rows(х).Delete Shift:=xlUp, как то так. Но нигде нет объяснения о том, что такое Shift и xlUp

Заранее спосибо!
Zelenaya вне форума Ответить с цитированием
Старый 26.09.2012, 08:37   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
CurWks.Rows.Count
выдаст количество строк в области CurWks

Код:
CurWks.Cells(Rows.Count, 2 + NewForm).End(xlUp).Row
выдаст номер последней заполненной строки в столбце 2 + NewForm из той же области. Т.е. если в вашей области 50 строк, последние 10 из которых пустые, то в первом случае будет цикл от 50 до 9, а во втором - от 40 до 9. Зачем считать больше?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 26.09.2012, 09:27   #6
Zelenaya
 
Регистрация: 25.09.2012
Сообщений: 4
По умолчанию

Понятно, спасибо! единственное что смущает теперь, это xlUp.
Zelenaya вне форума Ответить с цитированием
Старый 26.09.2012, 09:55   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Zelenaya Посмотреть сообщение
Понятно, спасибо! единственное что смущает теперь, это xlUp.
обычная константа (можно с тем же успехом на целочисленный эквивалент поменять = -4162). Указывает направление поиска ячейки со значением.
В справке очень неплохо об этом написано.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
Удаление строк Trimbl Microsoft Office Excel 13 18.10.2010 13:19
перенос строк удаление ненужных строк HelperAwM Microsoft Office Excel 5 26.06.2010 18:42
Удаление строк Dr.Badnezz Общие вопросы Delphi 1 07.10.2008 15:22
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38