powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление повторяющихся строк
25 сообщений из 32, страница 1 из 2
Удаление повторяющихся строк
    #37418465
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
На днях решал задачу по удалению повторяющихся строк на листе Excel. Нужно было оставить последнюю строку и удалить все предыдущие дубли. В прищепке файл с рабочим макросом. Для массива в несколько тысяч строк он, конечно, быстрый, но у меня массивы превышают 150 тыс. строк и обработка их в течение 12-15 часов, на мой взгляд, чрезмерно продолжительна.
Вопрос к знатокам - можно ли ускорить его работу?
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418523
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такие вещи надо обрабатывать через СУБД. Хотя бы в аксесс данные перекинуть. Задача будет решаться пару секунд.
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418548
Sir.Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, спасибо за мнение, но надо именно в Excel.
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418575
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего даже просто динамическое создание макросом mdb-файла, перекидывание туда данных, создание индексов, отбор нужных и перекидывание их обратно займет меньше времени (и все это не покидая экселя), чем работа данного макроса (минуты, а не часы).

Еще можно попробовать доступ к самому себе через ADO и отбор SQL-запросом. Это будет подольше, но, возможно. тоже даст выигрыш во времени. Надо пробовать.
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418595
Sir.Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
вот этого я не умею
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418652
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://programmersforum.ru/showthread.php?p=848421#post848421
вот пример как использовать ADO
_____________________

Из Вашего примера не понятно по каким столбцам отбирать уникальные :(
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418857
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: SirFisher
> На днях решал задачу по удалению повторяющихся строк на листе Excel. Нужно было оставить последнюю строку и
> удалить все предыдущие дубли.
> ... можно ли ускорить его работу?

А меню "Данные"->"Фильтр"->"Расширенный фильтр" и копирование результата в другое место с птичкой "Только уникальные
записи" не поможет?

P.S. В макросе можно копировать даже на другой лист :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418874
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос, извините, а как там в ячейку Поместить результат в диапазон
Пишу Лист2, не нравится ему
???
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418920
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюИгорь Горбонос, извините, а как там в ячейку Поместить результат в диапазон
Пишу Лист2, не нравится ему
???RTFM! низя так. тока макросом
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418940
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эндрю, я специально выделил что _программно_ можно.
Примерно
так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
...
Set sh = Application.ActiveSheet  'Worksheets("Исходные данные")
If sh.AutoFilter Is Nothing Then
    MsgBox "Установите автофильтр"
    Exit Sub
End If
....
Set s = CheckSheet(w1, "Уникальные") ' w1.Worksheets.Add
's.Name = "Уникальные"
Set s = Nothing
....
' Получаем список уникальных комбинаций из
' месяца оплаты, номера платёжного поручения,
' группы, вида и суммы оплаты
Set r = w1.Worksheets("Уникальные").Range("a1")
sh.Range("P:U").AdvancedFilter xlFilterCopy, , r, True
....
Дальше идет перебор полученных уникальных комбинаций и применение автофильтра на "исходных данных". Делается
"сворачивание" сумм и все заменяется одной строкой в "результат", после чего строятся проверочные сводные, которые
анализирует человек


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37418963
Thermik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SirFisher,

Может не удалять строки а уникальные вставлять на другой лист?
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419015
Sir.Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос, нет, фильтр по уникальным значениям не подойдет. Вы, наверное, не внимательно смотрели макрос. У него задача убрать из дублей ранние строки, оставив самые поздние
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419050
Thermik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вариант не удалять сразу а пометить "на удаление" отсортировать так чтобы "на удаление" стояли внизу таблицы, поиском найти строку которая первой занчится "на удаление" и удалить их махом до конца диапазона
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419197
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Sir.Fisher
> Игорь Горбонос, нет, фильтр по уникальным значениям не подойдет. Вы, наверное, не внимательно смотрели макрос. У
> него задача убрать из дублей ранние строки, оставив самые поздние


А почему именно "самые поздние"? какая разница какую строку с данными оставлять, если строки дубликаты и при удалении
дубликатов все равно поменяют свое положение на листе?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419241
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,
в том то и дело, что нужно оставлять наипозднейшие строки. Особенности работы с материалом.
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419245
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R Dmitry,

этот столбец формируется слиянием нескольких ячеек в начале макроса
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419404
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SirFisher,

файл сохраните на физический диск (из Temp может не работать)
проверяйте
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419448
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
Public Function ADO_R_Dmitry(ByVal strSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)

Dim sCon As String, FieldName As String
Dim rs As Object, cn  As Object

Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case CLng(Split(Application.Version, ".")( 0 ))
    Case Is <  12 
        sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
          & ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
    Case Is >=  12 
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
        & ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State =  1  Then Exit Function
Set rs = cn.Execute(strSql)
If Not FieldsName Then OutputFieldsName = False
 If OutputFieldsName Then
    For i =  0  To rs.Fields.Count -  1 
    OutputRange.Offset( 0 , i) = rs.Fields(i).Name
    Next
    Set OutputRange = OutputRange.Offset( 1 ,  0 )
 End If
OutputRange.CopyFromRecordset rs
rs.Close:  cn.Close
Set cn = Nothing: Set rs = Nothing
End Function

Sub Test()
'пример использования
strSql2 = "SELECT DISTINCTROW Max(F1), Last(F2), F3, F4, F5, F6, Last(F7), F8, Last(F9), Last(F10) , F11, F12, F13, F14, F15, Last(F16), Last(F17), Last(F18), Last(F19), Last(F20), Last(F21) , Last(F22)" _
& " FROM [Лист1$] GROUP BY F3, F4, F5, F6, F8, F11, F12, F13,F14, F15"
 Sheets( 2 ).[a1].CurrentRegion.ClearContents
Call ADO_R_Dmitry(strSql2, ThisWorkbook.FullName, Sheets( 2 ).[a1], False, False)
Sheets( 2 ).Activate
End Sub
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419541
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коментарии в функции можно было бы и оставить, ну да ладно бог с ними........
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419660
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R Dmitry, мне кейсы по версии понравились :)
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37419705
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanB,

старался делать универсальной, что бы не церемониться с 65 т строк
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37420253
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R DmitrySirFisher,

файл сохраните на физический диск (из Temp может не работать)
проверяйте

Спасибо Дмитрий! За 15 секунд переработал массив на 130 тыс. строк!
Конечно, интересно разобраться как он работает чтобы никого не беспокоить при разработке макросов.
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37427430
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SirFisherДобрый день
На днях решал задачу по удалению повторяющихся строк на листе Excel. Нужно было оставить последнюю строку и удалить все предыдущие дубли. В прищепке файл с рабочим макросом. Для массива в несколько тысяч строк он, конечно, быстрый, но у меня массивы превышают 150 тыс. строк и обработка их в течение 12-15 часов, на мой взгляд, чрезмерно продолжительна.
Вопрос к знатокам - можно ли ускорить его работу?Раз у вас 150 тысяч строк, значит у вас как минимум Excel 2007.
А в Excel 2007 есть такая фишка "Удалить дубликаты" во вкладке "Данные".
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37427623
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SirFisherR DmitrySirFisher,

файл сохраните на физический диск (из Temp может не работать)
проверяйте

Спасибо Дмитрий! За 15 секунд переработал массив на 130 тыс. строк!
Конечно, интересно разобраться как он работает чтобы никого не беспокоить при разработке макросов.просто sql-запрос книги excel к самой себе. такое можно встроенными способами сделать ручками. просто в данном случае вам дали красивый и универсальный код
...
Рейтинг: 0 / 0
Удаление повторяющихся строк
    #37429171
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon PlayerРаз у вас 150 тысяч строк, значит у вас как минимум Excel 2007.
А в Excel 2007 есть такая фишка "Удалить дубликаты" во вкладке "Данные".
Спасибо, мне знакома эта операция в excel. Но она не выполняет задачу в той форме, которая мне нужна. Но, за участие в беседе - спасибо
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление повторяющихся строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]