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

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

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

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

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
31.08.2011, 12:17
    #37418874
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление повторяющихся строк
Игорь Горбонос, извините, а как там в ячейку Поместить результат в диапазон
Пишу Лист2, не нравится ему
???
...
Рейтинг: 0 / 0
31.08.2011, 12:36
    #37418920
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление повторяющихся строк
Ципихович ЭндрюИгорь Горбонос, извините, а как там в ячейку Поместить результат в диапазон
Пишу Лист2, не нравится ему
???RTFM! низя так. тока макросом
...
Рейтинг: 0 / 0
31.08.2011, 12:41
    #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
31.08.2011, 12:55
    #37418963
Thermik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление повторяющихся строк
SirFisher,

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


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

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

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

файл сохраните на физический диск (из Temp может не работать)
проверяйте
...
Рейтинг: 0 / 0
31.08.2011, 16:22
    #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
31.08.2011, 16:57
    #37419541
R Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление повторяющихся строк
Коментарии в функции можно было бы и оставить, ну да ладно бог с ними........
...
Рейтинг: 0 / 0
31.08.2011, 17:45
    #37419660
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление повторяющихся строк
R Dmitry, мне кейсы по версии понравились :)
...
Рейтинг: 0 / 0
31.08.2011, 17:58
    #37419705
R Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление повторяющихся строк
PlanB,

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

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

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

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

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


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