|
|
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Подскажиет, пожалуйста, как сделать на VBA следующее: Необходимо перебрать ячейки одного столбца и в случае, если значение этой ячейки равно нулю, необходимо удалить всю строку, в которой находится данная ячейка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:01:21 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Покажу тебе часть своего кода... тут я удалял нулевые столбцы... дальше сам разберёшся... т.е вместо Colum будет Row пы.сы. ты случайно не шахматку делаешь? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:09:50 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Спасибо за подсказку, но почему-то не работает. Я уже несколько способов попробовал: Sub УдалениеНенужныхСтрок() ' ' MyCount = 0 For i = 17 To 925 If Cells(i, 7).Value = 0 Then MyCount = MyCount + 1 ' ActiveSheet.Range.EntireRow.Cells(i, 7).Delete ' Rows(Cells(i, 7)).Delete Range(Cells(i, 7)).EntireRow.Delete End If Next i MsgBox "Удалено " & MyCount & " строк" ' End Sub Что не так - не пойму! Кстати, что такое шахматка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:28:52 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Да, совсем забыл. Диалог выдает ошибку: Run-time error '1004': Method 'Range' of object '_Global' failed ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:33:20 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. по-моему так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:42:37 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Либо Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:52:56 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Тут нужно учитывать что когда удаляешь строку, то к ней же нужно и вернутся при следующей проверке... как это сделано у меня, т.е. если значение=0 то удалить эту строку и снова её же проверить иначе проверить следующую строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:54:55 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Попробуйте этот макрос, дпя проверки на листе создадите таблицу с несколькими столбцами и строками, запустите макрос, все строки в третем столбце содержающая 0 будут удалены, удачи! Пример таблицы A B C aaa 223 110.0 bbb 345 0,0 ccc 345 0.01 ddd 567 0,0 kkk 789 12,1 проверяется 3-й столбец (С) и если 0 то строка удаляется. Просто вам надо код переделать под вашу таблицу, ОК? Sub Delete_empty_rows() ' ' Delete_empty_rows Macro ' Macro recorded 24.05.2006 by Admin ' Dim i As Long, x As Long Application.ScreenUpdating = False [A1].Select x = ActiveCell.Offset(65535, 1).End(xlUp).Row For i = x To 1 Step -1 'If IsEmpty(Cells(i, 1)) = True Then If Cells(i, 3) = 0 Then ' проверка на нуль третего столбца Range(Cells(i, 1), Cells(i, 256)).Delete End If Next i Application.ScreenUpdating = True End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:55:49 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Granata005Тут нужно учитывать что когда удаляешь строку, то к ней же нужно и вернутся при следующей проверке... как это сделано у меня, т.е. если значение=0 то удалить эту строку и снова её же проверить иначе проверить следующую строку. Да, точно. Уже столкнулся с этой проблемой и сделал следующим образом, считает уже минут 10 - кошмар. Значит, сделал так: Sub УдалениеНенужныхСтрок() ' ' MyCount = 0 For i = 17 To 925 If Cells(i, 7).Value = 0 Then MyCount = MyCount + 1 Rows(i).Delete i = i - 1 End If Next i MsgBox "Удалено " & MyCount & " строк" ' End Sub Думаю, что причина в том, что если в ячейке пусто, то он ее тоже удаляет, а т.к. количество строк с данными становится меньше 925, то он удаляет последующие строки с пустыми данными, на место которой встает следующая строка и т.д. Вопрос: как сделать условие, чтобы проверялось действительно условие = 0 как число? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 12:23:54 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Потому что нужно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 12:40:20 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Подитожим: Граната + Deggasad - GioCH - Буга-га :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 12:43:17 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Granata005Потому что нужно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Это бесконечный цикл Подытожим: Granata005 - ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:04:31 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Так попробуй Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:13:13 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
DeggasadТак попробуй Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Ещё разик: Не Код: plaintext А, нужно так Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:18:59 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Ты чё гонишь, нет там бесконечного цикла... пьяный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:27:35 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Вот так вот вроде хорошо работает: Sub УдалениеНенужныхСтрок() ' ' MyCount = 0 For i = 925 To 17 Step -1 If Cells(i, 7).Text = 0 Then MyCount = MyCount + 1 Rows(i).Delete End If Next i MsgBox "Удалено " & MyCount & " строк" ' End Sub Это как писал GioCH - цикл по убыванию. Вообщем - Спасибо Всем! Есть еще такой нюанс: как сделать так, чтобы диапазон (925) определяля автоматически, т.е. находился последний элемент стобца с данными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:33:45 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Granata005Ты чё гонишь, нет там бесконечного цикла... пьяный? Код: plaintext 1. 2. 3. 4. 5. 6. Если есть есть хоть одно нулевое значение и при этом после 925 строки тоже нулевые значения 925 строка не будет достигнута никогда, так как будет всё время удаляться одна и та же строка и снова возвращаться к ней же i = i - 1 ! Осмелюсь заметить я Вам не грубил! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:34:42 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Та ладно те... я не грублю :) вообще не люблю вмешиваться в значение переменной цикла FOR... поэтому использовал While... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:39:52 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
SВот так вот вроде хорошо работает: Sub УдалениеНенужныхСтрок() ' ' MyCount = 0 For i = 925 To 17 Step -1 If Cells(i, 7).Text = 0 Then MyCount = MyCount + 1 Rows(i).Delete End If Next i MsgBox "Удалено " & MyCount & " строк" ' End Sub Это как писал GioCH - цикл по убыванию. Вообщем - Спасибо Всем! Есть еще такой нюанс: как сделать так, чтобы диапазон (925) определяля автоматически, т.е. находился последний элемент стобца с данными? Тоже вариант Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:40:24 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Та ладно те... я не грублю :) вообще не люблю вмешиваться в значение переменной цикла FOR... поэтому использовал While... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:42:56 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
SЕсть еще такой нюанс: как сделать так, чтобы диапазон (925) определяля автоматически, т.е. находился последний элемент стобца с данными? Поиск последней ячейки в Excel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:44:23 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Deggasad[quot S] Код: plaintext 1. Я с VBA столкнулся только недавно, как расшифровывается сие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:50:47 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
ПоследняяСтрока= ВДиапазоне("Г:Г").Найти(Что="ЧТО-НИБУДЬ", НаправлениеПоиска=Дальше, ПорядокПоиска=ПоСтрокам).Строка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:56:07 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
S Deggasad[quot S] Код: plaintext 1. Я с VBA столкнулся только недавно, как расшифровывается сие? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Токлько смотри If Cells(i, 7).Text = 0, находит только нулевые значения, но не пустые ячейки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:56:21 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Granata005Та ладно те... я не грублю :) вообще не люблю вмешиваться в значение переменной цикла FOR... поэтому использовал While... Да наверное всё таки нет бесконечного цикла, извиняюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 13:59:01 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Я не хотел спорить, но бесконечки действительно нет... ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:14:17 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Deggasad Токлько смотри If Cells(i, 7).Text = 0, находит только нулевые значения, но не пустые ячейки Да, мне и нужно удалять не пустые строки, где значение в стобце G = числу 0. LastRow = Range("G:G").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row А как можно интерпретировать данное выражение? Особенно не понятны переменные внутри функции Find (если это функция)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:14:47 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Тю... ну я ж те уже написал: ПоследняяСтрока= ВДиапазоне("Г:Г").Найти(Что="ЧТО-НИБУДЬ", НаправлениеПоиска=Дальше, ПорядокПоиска=ПоСтрокам).Строка т.е. выдаёт номер строки в которой из столбца Г было что-нибудь найдено... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:26:01 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Точнее не Дальше, а Предыдущее... короче находит последнюю строку... Блин, где кнопка "Правка"?!?!?! надоело флудить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:27:58 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Granata005ПоследняяСтрока= ВДиапазоне("Г:Г").Найти(Что="ЧТО-НИБУДЬ", НаправлениеПоиска=Дальше, ПорядокПоиска=ПоСтрокам).Строка Понятно. Спасибо. А по русски будет работать? :) Только не все понятно: в конце ".Строка" говорит о том, что нужно вернуть номер строки? это такое свойство Строка. Вообще, мне визуально трудно отличать, где в такого рода выражениях методы, а где свойства. Вроде как после функции с параметрами добавляется свойство? Или нет. Объясните, пожалуйста? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:28:05 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Range возвращает диапазон Find ищет в этом диапазоне и возвращает найденную ячейку Row - свойство найденной ячейки которую вернула Find. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:31:16 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Granata005Range возвращает диапазон Find ищет в этом диапазоне и возвращает найденную ячейку Row - свойство найденной ячейки которую вернула Find. Т.е. получается Range - это объект, Find - метод данного объекта, в результате работы которого получаем объект - ячейку с конкретным адресом. А далее с помощью свойства Row получаем номер строки найденного объекта(т.е. ячейки). Так или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:38:16 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
SПодскажиет, пожалуйста, как сделать на VBA следующее: Необходимо перебрать ячейки одного столбца и в случае, если значение этой ячейки равно нулю, необходимо удалить всю строку, в которой находится данная ячейка. А я для себя решил сделать так. Сначала очищается строка, где есть значение 0 "Ноль" (в колонке C) Код: plaintext 1. 2. По том удаляю все строки, в которых нет ни одной записи Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:43:06 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Ну да... Range он и обьект, и функция возвращающая обьект... там чёрт ногу сломит :) главное что работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 14:43:18 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
А подскажите еще, как сделать, чтобы курсор на листе переместился в заданные координаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 17:26:56 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
SА подскажите еще, как сделать, чтобы курсор на листе переместился в заданные координаты? Range("A1").Select ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 17:37:56 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Deggasad SА подскажите еще, как сделать, чтобы курсор на листе переместился в заданные координаты? Range("A1").Select Супер! Что только не перепробовал. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 18:02:41 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
Есть еще вопрос. Теперь необходимо удалить строки в которых одна из ячеек содержит дату. И в случае, если дата позже определенной даты - удалить все строку. Т.е. ДД.ММ.ГГГГ > 31.03.2007 то удаляем. Если сделать так, то удаляет, но все равно остаются строки где дата больше 31.03.2007 и вообще не понятно, что удаляет. For i = LastRow To 1 Step -1 If Cells(i, 5).Value > "31.03.2007" Then MyCount = MyCount + 1 Rows(i).Delete End If Next i Как можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 18:34:28 |
|
||
|
Удаление всей строки
|
|||
|---|---|---|---|
|
#18+
SЕсть еще вопрос. Теперь необходимо удалить строки в которых одна из ячеек содержит дату. И в случае, если дата позже определенной даты - удалить все строку. Т.е. ДД.ММ.ГГГГ > 31.03.2007 то удаляем. Если сделать так, то удаляет, но все равно остаются строки где дата больше 31.03.2007 и вообще не понятно, что удаляет. For i = LastRow To 1 Step -1 If Cells(i, 5).Value > "31.03.2007" Then MyCount = MyCount + 1 Rows(i).Delete End If Next i Как можно сделать? dim x as date x = "31.03.2007" For i = LastRow To 1 Step -1 If Format(Cells(i, 5).Value, "dd.mm.yyyy") > x Then MyCount = MyCount + 1 Rows(i).Delete End If Next i ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 18:44:49 |
|
||
|
|

start [/forum/topic.php?all=1&fid=61&tid=2183182]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
59ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 365ms |

| 0 / 0 |
