Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2011, 17:03   #1
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию удаление дублей

подскажите пожалуйста, в чем ошибка?
есть макрос, который красит все дубли, которые находит
но вот что-то не пойму, как сделать так, чтобы он удалял дубли?
у меня почему-то удаляется только первый из дублирующихся записей, а остальные остаются Т_Т

Код:
    For Each r In Range(Cells(FirstRow, FirstCol), Cells(MaxRow, MaxCol)).Columns
        'For Each c In Intersect(ActiveSheet.UsedRange, r)
        For Each c In r.Cells
           
            If Application.CountIf(r, c) > 1 Then c.Interior.ColorIndex = ErrorColor_
                c.Delete shift:=xlUp 'удаление дубля
           
        Next
    Next
Bape}l{ka вне форума Ответить с цитированием
Старый 29.06.2011, 17:21   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Удалять нужно циклом снизу вверх (и справа налево), иначе на место удалённого сдвигается строка/столбец, которые уже не проверяются.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.06.2011, 18:27   #3
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

а как такого добиться?? О_о
может есть примерчик удаления в цикле? или что-нибудь подобное?
Bape}l{ka вне форума Ответить с цитированием
Старый 29.06.2011, 19:19   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Bape}l{ka Посмотреть сообщение
как сделать так, чтобы он удалял дубли?
Удаление процесс далеко не однозначный... Я бы советовал не удалять информацию, а создать новый лист и на него скопировать все что нужно.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 29.06.2011, 20:05   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я так Ваш код наладил.
Т.к. удаляем в столбцах, то перебор столбцов не менял, а вот перебор строк сделал снизу вверх.
Нужно добавить объявление переменных, но это вероятно у Вас в коде есть.
Не понял, что за ErrorColor_ и почему удаление вне условия - сделал так:
Код:
Sub UdalitjPovtori()
    FirstRow = 5
    FirstCol = 2
    MaxRow = 10
    MaxCol = 3

    For Each r In Range(Cells(FirstRow, FirstCol), Cells(MaxRow, MaxCol)).Columns
        'For Each c In Intersect(ActiveSheet.UsedRange, r)
        For i = r.Cells.Count To 1 Step -1

            ''==== это для наладки, не нужно в продукте :)
            'r.Cells(i).Select
            'Debug.Print r.Address
            'r.Select
            'Debug.Print r.Cells(i).Address
            ''============================

            If Application.CountIf(r, r.Cells(i)) > 1 Then
                r.Cells(i).Interior.ColorIndex = ErrorColor_
                r.Cells(i).Delete shift:=xlUp    'удаление дубля
            End If
        Next
    Next

End Sub
Интересный эффект, как-то раньше не задумывался - при удалении ячейки диапазон r тоже уменьшается. Хотя так по логике и должно быть.
Т.е. то, что подтягивается снизу - в рассчёт не берётся.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 29.06.2011 в 20:16.
Hugo121 вне форума Ответить с цитированием
Старый 30.06.2011, 11:40   #6
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

вааа, большое человеческое спасибо)))

з.ы.: а вне условия, это я End If удалила случайно =ь
Bape}l{ka вне форума Ответить с цитированием
Старый 01.07.2011, 11:48   #7
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

вот не пойму, то ли записи не дублирующиеся, то ли есть ограничение на количество дублей ?_?

есть ли какие-то ограничения по циклам на количество обрабатываемых единиц??
Bape}l{ka вне форума Ответить с цитированием
Старый 01.07.2011, 11:50   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

... может быть r.Cells.Count выходит за предел Integer? ...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск дублей в строке Bape}l{ka Microsoft Office Excel 12 10.06.2011 09:24
Как объединить значения дублей в одну ячейку azzaro Microsoft Office Excel 9 22.01.2011 14:45
Удаление дублей 777grabber PHP 4 11.11.2009 17:21
Удаление RX artemavd БД в Delphi 1 14.06.2009 19:24