|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Мне необходимо удалить строки со нулевыми значиниями из Листа, но там порядка 200 000 строк. to_sheet - название рабочего листа Пробовал через автофильтр: to_sheet.AutoFilterMode = False to_sheet.Range("A1:H1").AutoFilter Field:=5, Criteria1:="=0" 'Cells(Range("a1").SpecialCells(xlCellTypeLastCell).Row + 1, 1) to_sheet.Activate Range(Cells(2, 1), Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, Cells.SpecialCells (xlCellTypeLastCell).Column)).Delete ---------------------------------------------------------- Далее пробовал через выделение дипазона Set Col1 = to_sheet.UsedRange.Columns(5) Col1_values = Evaluate("Transpose(Transpose(" & Col1.Address & "))") Col1.Copy Col1.PasteSpecial , xlPasteSpecialOperationDivide Set DelRng = Col1.SpecialCells(xlCellTypeConstants, xlErrors).EntireRow Col1 = Col1_values DelRng.Delete ----------------------------------------------------------- Как итог - оба работают правильно на меньших объёмах данных и не работает для такого количества строк :( Кто-нибудь сталкивался с такой проблемой? Может помочь? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2009, 16:26 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
stasuha, Макрос сейчас писать некогда, просто как я обычно это делаю (и руками, и макросом) Сначала сортирую так, чтобы все нули оказались внизу таблицы (по убыванию), Затем выделяю эти строки и либо просто стираю делитом, либо (это подольше) удаляю строки. Затем снова сортирую так, как было ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2009, 17:50 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Спасибо за сообщение. Согласен, сортировка быстрее работает, чем фильтр, но у меня ещё есть и отрицательные значения. Да и макрос нужен (а не просто просортировать и руками нажать del), т.к. таких файлов довольно много и их надо открывать, удалять нули и копировать результат в другое место. Поэтому не совсем понимаю, как можно удалить строки с нулями (если даже они будут внизу) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2009, 18:43 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Если коротко - пробежаться по ячейкам и воспользоваться медотом Union для объединения ячеек удовлетворяющих поиску, потом delCells.EntireRow.delete Не помню какое ограничение у Union ограничение на количество разрывных диапазонов, но возможно Вам хватит попробуйте ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2009, 19:26 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Можно с помощью макроса -преобразовать диапазон в массив -удалить из него нулевые строки -стереть все на листе и вставить обработанный массив ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2009, 21:44 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Вот пример, но работает долго, на 60 тыс строк, при удалении через одну строку, у меня работает 5 мин. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 09:53 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
stasuha, Наваял такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Перед применением надо выделить столбец в котором нулевые значения. Удаляет строки в которых по данному столбцу стоит 0, либо пусто. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 10:56 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Чтобы избежать ошибку с переполнением Union можно попробовать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
Но есть опасения что в случае кода Код: plaintext
Код: plaintext
В этом случае тогда после удаления наверно правильнее снова запустить цикл for each с нуля, надо лишь знать, какой диапазон при этом выделить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 11:07 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Нижний текст в предыдущем сообщении читать так: Но есть опасение, что в случае выполнения кода Код: plaintext
Код: plaintext
В этом случае тогда после удаления наверно правильнее снова запустить цикл for each с нуля, надо лишь знать, какой диапазон при этом выделить. А если лень думать, то можно удалить лишь максимально возможный диапазон до первой ошибки с Union и затем предложить пользователю выделить оставшийся диапазон и запустить макрос повторно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 11:13 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Спасибо за ваши ответы, но так и есть, все способы с Range сразу вылетают в ошибку.... Поэтому пока так и не работает :( Странно 2007 Ексель сделали, а всё остальное работает только до 60 тысяч строк. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 11:35 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
stasuha, Попробуй такой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
Перед применением надо выделить столбец в котором нулевые значения. Удаляет строки в которых по данному столбцу стоит 0, либо пусто. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2009, 14:13 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Djon Playerв случае выполнения кода Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2009, 13:46 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Hugo121Djon Playerв случае выполнения кода Код: plaintext
Код: plaintext
Чтобы не усложнять код пошёл по простому пути, использовал простой цикл for each. Интересно, как в таком цикле включить обратный перебор, кто-нибудь знает? Использованиеь step -1 не канает. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2009, 14:21 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Как же вам тяжело приходится без СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2009, 14:24 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
А зачем нужен обратный перебор? Удалили и забыли - или я не въехал в вопрос... "Мне необходимо удалить строки со нулевыми значиниями из Листа" - пытаюсь сделать это, смотрим как я понял 5-ю колонку. У меня 2000, поэтому не проверял на 200000 строк, на 65000 работает небыстро, но работает. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2009, 14:43 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Hugo121А зачем нужен обратный перебор? Удалили и забыли - или я не въехал в вопрос... "Мне необходимо удалить строки со нулевыми значиниями из Листа" - пытаюсь сделать это, смотрим как я понял 5-ю колонку. У меня 2000, поэтому не проверял на 200000 строк, на 65000 работает небыстро, но работает. Да, при обратном переборе повторный перебор не нужен, достаточно одного цикла, слишком быстро писал просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2009, 15:03 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Djon Player, К вашему коду я бы ещё добавил код связанный с Application.Calculation, т.к. если там ещё и расчёт какие-то есть, то всё будет тормозить ещё больше. Так-же добавил бы порционное удаление группы строк, а не по одной строке, мне кажется так будет работать быстрее, хотя конечно это надо проверять на реальных данных, как быстрее. Можно ещё даже подобрать некое число, чтобы при удалении группы строк в количестве этого числа удаление работало максимально быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2009, 15:08 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Процедура очистки(удаления) строк в столбце ColNum со значениями DelValue: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
Тестирование: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2009, 04:54 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
ZVIПроцедура очистки(удаления) строк в столбце ColNum со значениями DelValue: [/src] Круто, попробовал на миллионе строк в Excel 2007, работает, причем очень быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 10:27 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Спасибо за ваши ответы. Но последний код действительно работает правильно и быстро! Респект вам! и большое спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 18:09 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Добрый день всем! Процедура Sub DelRows(TableHeader As Range, ColNum As Long, DelValue).... очень быстро удаляет строки по критерию одного из столбцов ( по критерию DelValue из столбца ColNum если точнее). У меня такая сейчас задача: удалить все строки в 7 столбце, значение которых не равно 2 или 3. пробовать запускать процедуру N раз как-то глупо, с другой стороны вписать значение <>2 или <>3 тоже не катит, так как DelValue не воспринимает этого. Может кто подскажет как в таком случае быть? )) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2012, 14:50 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
leha013-01, Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2012, 15:48 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
to ПЕНСИОНЕРКА: Спасибо, конечно, за вариант )) но таким макаром можно удалять строки практически по любому критерию, но как гласит тема данного вопроса нужно удалить N строк по определенному критерию одного из столбцов да еще и одним махом и цикл If Cells(x, 7).Value = 2 Or Cells(x, 7).Value = 3 Then else Rows(x).EntireRow.Delete endif здесь совершенно не катит ) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2012, 23:23 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
> leha013-01, > пробовать запускать процедуру N раз как-то глупо... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Код: vbnet 1.
ЗЫ: скорость будет уже не та ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2012, 00:22 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Пример данных не хотите показать? А то может удалять строки совсем и не нужно... Ну а если что, чуть подкорректировал под задачу (для чисел!): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63.
Можно придумать как-то иначе словарь заполнять... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2012, 01:09 |
|
|
start [/forum/topic.php?fid=61&fpage=44&tid=2173445]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
64ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 283ms |
total: | 461ms |
0 / 0 |