|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#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 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
спасибо огромное!! все отлично работает )) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 22:57 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
ZVIПроцедура очистки(удаления) строк в столбце ColNum со значениями DelValue: Код: 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.
Тестирование: Код: vbnet 1. 2. 3.
Помогите подредактировать скрипт удаления, мне нужно удалить все строки с инициалами и все строки где отчество заканчивается на "ИЧ" т.е. мужчин. Каким я не въехал где здесь определяется критерий удаления. Формат записей: 900939 КНЯЗЕВА АННА ЯКОВЛЕВНА ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 18:46 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Можно не корректировать макрос... Можно даже использовать его самую первую версию. Надо просто делать так: сначала в каком-нибудь одном столбце сформируйте с помощью формул некоторые значения, а затем уже примените DelRows к этому столбцу, указав значение, по которому нужно удалять... Что же касается конкретной формулы для анализа ваших данных... Скажите, приведенный вами "пример формата" - это четыре столбца (поля) или два, или один? "Инициалы" - это что (одна буква, одна буква с точкой, как прописаны инициалы для неоднословных имён и отчеств)? Почему вы считаете, что только "ИЧ" в отчестве определяет мужчин (нет, конечно, "ич"=>муж, но муж<=>"ич", например, имя-отчество "Ариф Гора-Оглы")? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 20:39 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
AndreTM, Формат такой: 928596 | ШАЙКУЛОВА | АКТОТЫ | АЛИЕВНА | УЛ.ТЛЕНДИЕВА НУРГИСЫ | Д.40 | КВ.1 | Эта база данных клиентов нужно выделить из неё только женщин, инициалы имееться ввиду например С. или просто одна буква, так же есть необходимость удалить строки где есть например пустая ячейка вместо адресса. Если бы вы могли уточнить процедуру применения этого макроса "сформируйте с помощью формул некоторые значения, а затем уже примените DelRows к этому столбцу, указав значение, по которому нужно удалять" ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2012, 16:39 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Ну так вам и надо тогда не "удалять мужчин" а "отобрать женщин" Отчества у женщин заканчиваются на "НА". Остаются, правда, варианты - скажем "Мярьям Невретдин-кызы". Впрочем, тоже решаемые. Запишите формулу, например, в [J1]: Код: vbnet 1.
растяните на весь список - и удаляйте всех с нулём в столбце [J] ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2012, 00:21 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Если процедура разовая, то в Excel можно строки отфильтровать по условию, что значение оканчивается "ич" и удалить такие сроки. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 15:05 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Доброго времени суток. Где я должен прописать DelRows в Екселе, что бы он видел эту функцию? Через "Разработчик" зашел в "Просмотр кода" и воткнул код, изменив на Public Function DelRows ... End Function Засунул в макрос DelRows и запустил, получил "саб или функция не определены" , выделено именно DelRows. Ткните пожалуйста в ошибку. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2015, 21:07 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
vad-anatolijТкните пожалуйста в ошибкуЧтобы "ткнуть", надо видеть весь проект. А то непонятно, что и куда Вы "воткнули", "засунули". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2015, 21:29 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
Казанский, код не менял ,поэтому предположил, что у меня обычная ошибка новичка (совсем не работаю в Ексель в VBA), где то не там прописал паблик функцию и Ексель просто ее не видит. Подробно: В раздел "General" прописал Код: 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.
В Макрос, который находится в нужном файле Ексель вставил Код: vbnet 1. 2. 3. 4.
При запуске Макроса 2 выдает сообщение Microsoft Visual Basic --------------------------- Compile error: Sub or Function not defined --------------------------- ОК Справка --------------------------- Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2015, 21:47 |
|
удаление строк в большом Ексель файле
|
|||
---|---|---|---|
#18+
vad-anatolijВ раздел "General" прописалВ раздел "General" какого модуля? Это должен быть обычный модуль (Insert - Module) в той же книге, не ЭтаКнига, не Лист1. Проще всего поместить процедуру рядом с Sub Test() ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 10:29 |
|
|
start [/forum/topic.php?all=1&fid=61&tid=2173445]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
87ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 208ms |
0 / 0 |