Страницы: 1
RSS
Удаление строк по условию
 
Есть огромная таблица и в ней есть колонка с одной, двумя и тремя звездочками. Надо оставить строки только с одной звездочкой.
 
поиск не работает? примера нету?  
 
for each r in usedrange.cells.entirerow  
if r.cells(1,1).value="*" then r.delete shift:=xlup  
next
 
for each r in usedrange.cells.entirerow  
if r.cells(1,1).value<>"*" then r.delete shift:=xlup  
next
 
Сразу скажу таблица огроменная64000строк.Что я сделала. Я с помощью автофильтравыбрала строки с одной звездочкой. Пытаюсь выделить видимые строки, чтобы скопировать их на другой лист, но Excel мне пишет "Невозможно использовать или создать ссылку на диапазон данных, так как она слишком сложна.И что делать-то? Очень надо. Отчет однако!!!
 
Так быстрее:  
 
Sub Main()  
   Dim x As Range: Application.ScreenUpdating = False  
   Set x = [C:C].Find("~*", , , xlWhole)
   If Not x Is Nothing Then  
       [C:C].ColumnDifferences(x).EntireRow.Delete
   End If  
End Sub
 
{quote}{login=ik}{date=07.04.2011 02:12}{thema=наоборот :)}{post}for each r in usedrange.cells.entirerow  
if r.cells(1,1).value<>"*" then r.delete shift:=xlup  
next{/post}{/quote}  
 
В макросах я ничего не понимаю.Объясните что это за команды и куда их вводят.
 
Не, с одной звездой надо оставить!  
В 2007: выделить столбец, Ctrl+H - найти "~*~*" (без кавычек), снять "Ячейка целиком" - Найти все - Ctrl+A (выделить все найденные) - правый клик по любой выделенной ячейке - удалить - строку.
 
Сюда ещё загляните: http://www.planetaexcel.ru/forum.php?thread_id=26246
 
{quote}{login=Казанский}{date=07.04.2011 02:18}{thema=}{post}Не, с одной звездой надо оставить!  
В 2007: выделить столбец, Ctrl+H - найти "~*~*" (без кавычек), снять "Ячейка целиком" - Найти все - Ctrl+A (выделить все найденные) - правый клик по любой выделенной ячейке - удалить - строку.{/post}{/quote}  
У нас на работа 2003 гда. Надо в нем все сделать.
 
Я макрос на 2000 писал...  
Т.е. проверил :)
 
{quote}{login=Hugo}{date=07.04.2011 02:16}{thema=}{post}Так быстрее:  
 
Sub Main()  
   Dim x As Range: Application.ScreenUpdating = False  
   Set x = [C:C].Find("~*", , , xlWhole)
   If Not x Is Nothing Then  
       [C:C].ColumnDifferences(x).EntireRow.Delete
   End If  
End Sub{/post}{/quote}  
 
 
надо бы перед End Sub добавить  
Application.ScreenUpdating = True
 
{quote}{login=Казанский}{date=07.04.2011 02:18}{thema=}{post}Не, с одной звездой надо оставить!  
В 2007: выделить столбец, Ctrl+H - найти "~*~*" (без кавычек), снять "Ячейка целиком" - Найти все - Ctrl+A (выделить все найденные) - правый клик по любой выделенной ячейке - удалить - строку.{/post}{/quote}  
 
Пробовала в Excel 2003 сделать снова пишетНевозможно использовать или создать ссылку на диапазон данных, так как она слишком сложна
 
{quote}{login=Hugo}{date=07.04.2011 02:21}{thema=}{post}Я макрос на 2000 писал...  
Т.е. проверил :){/post}{/quote}  
 
на каких данных? :)  
 
пожалуйста, проверьте на таких:  
в четных строках - звёздочка, в нечётных - единичка.  
строк - 50000
 
То, что делает макрос Hugo, можно сделать вручную.  
Выделите столбец так, чтобы ячейка с одной звездой осталась активной (если в столбце нет разрывов, то выделите первую ячейку с одной звездой и Ctrl+Shift+Down). F5 - выделить - отличия по столбцам (Или в 2003 это в меню Правка?). Правый клик по любой выделенной ячейке - удалить - строку.
 
{quote}{login=Казанский}{date=07.04.2011 02:30}{thema=belka5}{post}То, что делает макрос Hugo, можно сделать вручную.  
Выделите столбец так, чтобы ячейка с одной звездой осталась активной (если в столбце нет разрывов, то выделите первую ячейку с одной звездой и Ctrl+Shift+Down). F5 - выделить - отличия по столбцам (Или в 2003 это в меню Правка?). Правый клик по любой выделенной ячейке - удалить - строку.{/post}{/quote}  
Что такое Down?
 
{quote}{login=Казанский}{date=07.04.2011 02:30}{thema=belka5}{post}То, что делает макрос Hugo, можно сделать вручную.  
Выделите столбец так, чтобы ячейка с одной звездой осталась активной (если в столбце нет разрывов, то выделите первую ячейку с одной звездой и Ctrl+Shift+Down). F5 - выделить - отличия по столбцам (Или в 2003 это в меню Правка?). Правый клик по любой выделенной ячейке - удалить - строку.{/post}{/quote}  
 
то же самое предложение, что и к Hugo.  
 
насколько я понимаю, Excel не умеет работать с диапазонами, содержащими слишком много несвязных диапазонов. хотя в справке Excel'я я об этом упоминаний не нашёл :)  
а мой вариант, хоть и медленный, работает всегда :)
 
{quote}{login=ik}{date=07.04.2011 02:36}{thema=Re: belka5}{post}{quote}{login=Казанский}{date=07.04.2011 02:30}{thema=belka5}{post}То, что делает макрос Hugo, можно сделать вручную.  
Выделите столбец так, чтобы ячейка с одной звездой осталась активной (если в столбце нет разрывов, то выделите первую ячейку с одной звездой и Ctrl+Shift+Down). F5 - выделить - отличия по столбцам (Или в 2003 это в меню Правка?). Правый клик по любой выделенной ячейке - удалить - строку.{/post}{/quote}  
 
то же самое предложение, что и к Hugo.  
 
насколько я понимаю, Excel не умеет работать с диапазонами, содержащими слишком много несвязных диапазонов. хотя в справке Excel'я я об этом упоминаний не нашёл :)  
а мой вариант, хоть и медленный, работает всегда :){/post}{/quote}  
 
А куда надо эти команды-то вводить?Я чайник в макросах!
 
> Пробовала в Excel 2003 сделать снова пишетНевозможно использовать или создать ссылку на диапазон данных, так как она слишком сложна  
 
А, это пресловутое ограничение в 8192 области. В 2007 тоже, кстати.  
Значит, делайте этим методом или через "отличия по столбцам" частями по 16000 строк.  
Чтобы удобно выделить большой диапазон, вводите его адрес слева от строки формул, например A16001:A32000  
 
=65743= стрит!
 
Товарищи, ну ведь ничего не получается. Помогайте!
 
{quote}{login=belka5}{date=07.04.2011 02:59}{thema=}{post}Товарищи, ну ведь ничего не получается. Помогайте!{/post}{/quote}  
В студию пример (фрагмент реальной таблицы) обязательно с 1, 2, 3 звездочками - общим весом не более 100Kb...
 
Тогда так - алгоритм из http://www.planetaexcel.ru/forum.php?thread_id=24871&page_forum=2&allnum_forum=52  
 
58000+ строк */1 прошерстил за 104.6289 сек.  
 
Sub Main()  
Dim t As Single, i&, c$, a$, b  
Application.ScreenUpdating = False  
't = Timer  
 
b = Range([C1], Range("C" & Rows.Count).End(IIf(Len(Range("A" & Rows.Count)), xlDown, xlUp))).Value
 
For i = UBound(b) To 1 Step -1  
If b(i, 1) <> "*" Then  
a = i & ":" & i & ","  
If Len(c & a) > 255 Then  
Application.StatusBar = "Delete Range From " & i  
Range(Left(c, Len© - 1)).Delete: c = a  
Else  
c = c & a  
End If  
End If  
Next  
Range(Left(c, Len© - 1)).Delete  
Application.StatusBar = False  
Application.ScreenUpdating = True  
 
'Debug.Print Timer - t  
   
End Sub
 
Да, забыл - */1 в колонке C.
Страницы: 1
Читают тему
Наверх