|
|
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Добрый день На днях решал задачу по удалению повторяющихся строк на листе Excel. Нужно было оставить последнюю строку и удалить все предыдущие дубли. В прищепке файл с рабочим макросом. Для массива в несколько тысяч строк он, конечно, быстрый, но у меня массивы превышают 150 тыс. строк и обработка их в течение 12-15 часов, на мой взгляд, чрезмерно продолжительна. Вопрос к знатокам - можно ли ускорить его работу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 06:29 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Такие вещи надо обрабатывать через СУБД. Хотя бы в аксесс данные перекинуть. Задача будет решаться пару секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 08:32 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, спасибо за мнение, но надо именно в Excel. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 09:02 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Скорее всего даже просто динамическое создание макросом mdb-файла, перекидывание туда данных, создание индексов, отбор нужных и перекидывание их обратно займет меньше времени (и все это не покидая экселя), чем работа данного макроса (минуты, а не часы). Еще можно попробовать доступ к самому себе через ADO и отбор SQL-запросом. Это будет подольше, но, возможно. тоже даст выигрыш во времени. Надо пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 09:32 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, вот этого я не умею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 09:48 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
http://programmersforum.ru/showthread.php?p=848421#post848421 вот пример как использовать ADO _____________________ Из Вашего примера не понятно по каким столбцам отбирать уникальные :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 10:42 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
> Автор: SirFisher > На днях решал задачу по удалению повторяющихся строк на листе Excel. Нужно было оставить последнюю строку и > удалить все предыдущие дубли. > ... можно ли ускорить его работу? А меню "Данные"->"Фильтр"->"Расширенный фильтр" и копирование результата в другое место с птичкой "Только уникальные записи" не поможет? P.S. В макросе можно копировать даже на другой лист :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 12:08 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, извините, а как там в ячейку Поместить результат в диапазон Пишу Лист2, не нравится ему ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 12:17 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Ципихович ЭндрюИгорь Горбонос, извините, а как там в ячейку Поместить результат в диапазон Пишу Лист2, не нравится ему ???RTFM! низя так. тока макросом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 12:36 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Эндрю, я специально выделил что _программно_ можно. Примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. "сворачивание" сумм и все заменяется одной строкой в "результат", после чего строятся проверочные сводные, которые анализирует человек Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 12:41 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
SirFisher, Может не удалять строки а уникальные вставлять на другой лист? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 12:55 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, нет, фильтр по уникальным значениям не подойдет. Вы, наверное, не внимательно смотрели макрос. У него задача убрать из дублей ранние строки, оставив самые поздние ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 13:13 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Еще вариант не удалять сразу а пометить "на удаление" отсортировать так чтобы "на удаление" стояли внизу таблицы, поиском найти строку которая первой занчится "на удаление" и удалить их махом до конца диапазона ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 13:32 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
> Автор: Sir.Fisher > Игорь Горбонос, нет, фильтр по уникальным значениям не подойдет. Вы, наверное, не внимательно смотрели макрос. У > него задача убрать из дублей ранние строки, оставив самые поздние А почему именно "самые поздние"? какая разница какую строку с данными оставлять, если строки дубликаты и при удалении дубликатов все равно поменяют свое положение на листе? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 14:36 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, в том то и дело, что нужно оставлять наипозднейшие строки. Особенности работы с материалом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 14:50 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
R Dmitry, этот столбец формируется слиянием нескольких ячеек в начале макроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 14:53 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
SirFisher, файл сохраните на физический диск (из Temp может не работать) проверяйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 16:09 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
R DmitrySirFisher,проверяйтезапросом - это вешь :) с вашего позволения сохраняю код на поиск Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 16:22 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Коментарии в функции можно было бы и оставить, ну да ладно бог с ними........ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 16:57 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
R Dmitry, мне кейсы по версии понравились :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 17:45 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
PlanB, старался делать универсальной, что бы не церемониться с 65 т строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2011, 17:58 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
R DmitrySirFisher, файл сохраните на физический диск (из Temp может не работать) проверяйте Спасибо Дмитрий! За 15 секунд переработал массив на 130 тыс. строк! Конечно, интересно разобраться как он работает чтобы никого не беспокоить при разработке макросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2011, 01:50 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
SirFisherДобрый день На днях решал задачу по удалению повторяющихся строк на листе Excel. Нужно было оставить последнюю строку и удалить все предыдущие дубли. В прищепке файл с рабочим макросом. Для массива в несколько тысяч строк он, конечно, быстрый, но у меня массивы превышают 150 тыс. строк и обработка их в течение 12-15 часов, на мой взгляд, чрезмерно продолжительна. Вопрос к знатокам - можно ли ускорить его работу?Раз у вас 150 тысяч строк, значит у вас как минимум Excel 2007. А в Excel 2007 есть такая фишка "Удалить дубликаты" во вкладке "Данные". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2011, 16:09 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
SirFisherR DmitrySirFisher, файл сохраните на физический диск (из Temp может не работать) проверяйте Спасибо Дмитрий! За 15 секунд переработал массив на 130 тыс. строк! Конечно, интересно разобраться как он работает чтобы никого не беспокоить при разработке макросов.просто sql-запрос книги excel к самой себе. такое можно встроенными способами сделать ручками. просто в данном случае вам дали красивый и универсальный код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2011, 17:25 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Djon PlayerРаз у вас 150 тысяч строк, значит у вас как минимум Excel 2007. А в Excel 2007 есть такая фишка "Удалить дубликаты" во вкладке "Данные". Спасибо, мне знакома эта операция в excel. Но она не выполняет задачу в той форме, которая мне нужна. Но, за участие в беседе - спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2011, 15:08 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
PlanBпросто sql-запрос книги excel к самой себе. такое можно встроенными способами сделать ручками. просто в данном случае вам дали красивый и универсальный код Ручками много чего можно делать, но все упирается в такой фактор как время и производное от времени - скорость. Кроме того, код, предложенный Дмитрием, позволил мне взшлянуть на автоматизацию рутинных процессов с новой точки бытия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2011, 15:10 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
SirFisherDjon PlayerРаз у вас 150 тысяч строк, значит у вас как минимум Excel 2007. А в Excel 2007 есть такая фишка "Удалить дубликаты" во вкладке "Данные". Спасибо, мне знакома эта операция в excel. Но она не выполняет задачу в той форме, которая мне нужна. Но, за участие в беседе - спасиборешает... вообще, как мне кажется, прописывать подключение ADO в задачке, для которой есть, как минимум 2 встроенных метода 2007 excel (я имею ввиду уже упомянутые "удалить дубликаты" и "получить внешние данные из excel"), - дело не благодарное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2011, 15:41 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
SirFisher, Попробуйте из кода Дмитрия убрать кейс, т.е. строки Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2011, 16:42 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Более чем в 2 раза быстрее получилось: Sub test2() Dim tm: tm = Timer Sheets(2).[A1].CurrentRegion.ClearContents Dim a(), oDict As Object, i As Long, temp As String Dim ind As Long With Sheets(1) a = .[A1].CurrentRegion.Value End With ReDim b(1 To UBound(a), 1 To 22) Set oDict = CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) temp = _ a(i, 3) & "|" & _ a(i, 4) & "|" & _ a(i, 5) & "|" & _ a(i, 6) & "|" & _ a(i, 7) & "|" & _ a(i, 8) & "|" & _ a(i, 9) & "|" & _ a(i, 10) & "|" & _ a(i, 11) & "|" & _ a(i, 12) & "|" & _ a(i, 13) & "|" & _ a(i, 14) & "|" & _ a(i, 15) & "|" & _ a(i, 16) & "|" & _ a(i, 17) & "|" & _ a(i, 18) & "|" & _ a(i, 19) & "|" & _ a(i, 20) & "|" & _ a(i, 21) & "|" & _ a(i, 22) If Not oDict.Exists(temp) Then ind = ind + 1 oDict.Add temp, CStr(ind) For ii = 1 To 22: b(ind, ii) = a(i, ii): Next End If Next With Sheets(2) .[A1].Resize(ind, 22) = b End With Sheets(2).Activate Debug.Print Timer - tm End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2011, 18:23 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Упс, упустил: For i = UBound(a) To 1 Step -1 но тогда ещё в конце отсортировать по порядку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2011, 18:25 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Предыдущий вариант просто оставляет первую попавшуюся уникальную строку (в зависимости от направления перебора массива это будет первая или последняя строка источника). Вот ещё два варианта - первый оставляет последнюю строку из дублей (т.е. практически как v.01), второй оставляет строку с последней датой (еcли даты одинаковы, тогда последнюю встреченную). Но вывод не сортируется. Вообще на ADO результат красивее - сортированный, и отбор последних по бОльшему количеству полей задан, но процесс в 2 раза медленнее на примере (не знаю, как на 150к строк будет), но сложнее настройка, да и может хватит просто взять строку с последней датой? Код: 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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2011, 09:12 |
|
||
|
Удаление повторяющихся строк
|
|||
|---|---|---|---|
|
#18+
Коллеги, подскажите по коду (см. ниже). Взят из примера выше (в начеле темы). Работает относительно первой строки. Как сдвинуть относительно второй второй строки (то есть будет заголовок и одна строка с которой не будет производиться работа). Другими словами, первый две строки не трогать. Менял вот это Код: plaintext Код: plaintext Ниже в Код: plaintext 1. Основной код: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2011, 16:57 |
|
||
|
|

start [/forum/topic.php?all=1&fid=61&tid=2176482]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
278ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 574ms |

| 0 / 0 |
