Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Отфильтровать дубли - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Отфильтровать дубли
and_evg Дата: Среда, 30.08.2017, 13:52 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
Добрый день.
Вроде бы тема про дублирование данных поднималась неоднократно и решений масса, это и формула в условное форматирование, и формула в дополнительном столбце, и формулы массива, и сводная таблица, и удалить дубликаты, и расширенный фильтр…. И т.д. Но конкретно к своей задаче я так решения и не нашел.
Имеется большая таблица, порядка 30-ти полей и более 100 тыс записей, которые постоянно добавляются.
При вводе пользователями новой записи (или редактировании старой) появляется возможность ошибочно ввести в определенное (ключевое) поле уже существующую запись. И данная погрешность может накапливаться.
Собственно вопрос: Как посредством макроса с помощью автофильтра отфильтровать только те записи, которые имеют дубли, что бы дать пользователю выбрать какая из записей актуальна, а какую можно удалить прямо из тела рабочей таблицы.
Почему именно макросом и посредством автофильтра? Условное форматирование и дополнительные столбцы не хочу использовать, так как, таблица большая и данное решение сильно замедлит общую работу таблицы. Эта проверка нужна будет только периодически при стечении определенных обстоятельств, и работа макроса не сильно будет напрягать.
Так как возможно дублей может быть несколько, а в автофильтре допустимо только два критерия, то лучше критерии передавать через массив. Вот и сама суть вопроса как выбрать и засунуть в массив дублирующиеся записи?
[vba]
Код
Sub AutoFil()
    Dim ValueArr()
    ValueArr = Array("1", "2", "3")
    Range("A1:B12").AutoFilter
    Range("A1:B12").AutoFilter Field:=1, Criteria1:=ValueArr, Operator:=xlFilterValues
End Sub
[/vba]
К сообщению приложен файл: 2595578.xls (34.5 Kb)
 
Ответить
СообщениеДобрый день.
Вроде бы тема про дублирование данных поднималась неоднократно и решений масса, это и формула в условное форматирование, и формула в дополнительном столбце, и формулы массива, и сводная таблица, и удалить дубликаты, и расширенный фильтр…. И т.д. Но конкретно к своей задаче я так решения и не нашел.
Имеется большая таблица, порядка 30-ти полей и более 100 тыс записей, которые постоянно добавляются.
При вводе пользователями новой записи (или редактировании старой) появляется возможность ошибочно ввести в определенное (ключевое) поле уже существующую запись. И данная погрешность может накапливаться.
Собственно вопрос: Как посредством макроса с помощью автофильтра отфильтровать только те записи, которые имеют дубли, что бы дать пользователю выбрать какая из записей актуальна, а какую можно удалить прямо из тела рабочей таблицы.
Почему именно макросом и посредством автофильтра? Условное форматирование и дополнительные столбцы не хочу использовать, так как, таблица большая и данное решение сильно замедлит общую работу таблицы. Эта проверка нужна будет только периодически при стечении определенных обстоятельств, и работа макроса не сильно будет напрягать.
Так как возможно дублей может быть несколько, а в автофильтре допустимо только два критерия, то лучше критерии передавать через массив. Вот и сама суть вопроса как выбрать и засунуть в массив дублирующиеся записи?
[vba]
Код
Sub AutoFil()
    Dim ValueArr()
    ValueArr = Array("1", "2", "3")
    Range("A1:B12").AutoFilter
    Range("A1:B12").AutoFilter Field:=1, Criteria1:=ValueArr, Operator:=xlFilterValues
End Sub
[/vba]

Автор - and_evg
Дата добавления - 30.08.2017 в 13:52
KuklP Дата: Среда, 30.08.2017, 14:14 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Автофильтром никак. Можно при вводе проверять на дубль, тогда и дубликатов не будет.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеАвтофильтром никак. Можно при вводе проверять на дубль, тогда и дубликатов не будет.

Автор - KuklP
Дата добавления - 30.08.2017 в 14:14
and_evg Дата: Среда, 30.08.2017, 14:19 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
Можно при вводе проверять на дубль,

Таблица не моя и проект запаролен.
Автофильтром никак

Вопрос не как автофильтром, а как выбрать только дубли и засунуть их в массив
 
Ответить
Сообщение
Можно при вводе проверять на дубль,

Таблица не моя и проект запаролен.
Автофильтром никак

Вопрос не как автофильтром, а как выбрать только дубли и засунуть их в массив

Автор - and_evg
Дата добавления - 30.08.2017 в 14:19
KuklP Дата: Среда, 30.08.2017, 14:22 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Для Вас да и вообще проще с допстолбцом счетесли.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеДля Вас да и вообще проще с допстолбцом счетесли.

Автор - KuklP
Дата добавления - 30.08.2017 в 14:22
and_evg Дата: Среда, 30.08.2017, 14:30 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
с допстолбцом счетесли

Согласен что проще допстолбцом, но таблица очень большая и в ней много вычислений а допстолбец будет постоянно нагружать.
 
Ответить
Сообщение
с допстолбцом счетесли

Согласен что проще допстолбцом, но таблица очень большая и в ней много вычислений а допстолбец будет постоянно нагружать.

Автор - and_evg
Дата добавления - 30.08.2017 в 14:30
and_evg Дата: Среда, 30.08.2017, 14:52 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
Все же порекомендую применить такой подход

Данный подход тоже имеет право на жизнь.
макрос находит все дубли

Но вот это не соображу как сделать.
 
Ответить
Сообщение
Все же порекомендую применить такой подход

Данный подход тоже имеет право на жизнь.
макрос находит все дубли

Но вот это не соображу как сделать.

Автор - and_evg
Дата добавления - 30.08.2017 в 14:52
KuklP Дата: Среда, 30.08.2017, 14:58 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Андрей опять все усложняет :) Просто словарем посчитать дубли и циклом перебросить их в массив для автофильтра.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеАндрей опять все усложняет :) Просто словарем посчитать дубли и циклом перебросить их в массив для автофильтра.

Автор - KuklP
Дата добавления - 30.08.2017 в 14:58
and_evg Дата: Среда, 30.08.2017, 15:04 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
словарем посчитать дубли

тоже думал про словарь, уникальные вроде немного понятно как, а как дубли соображу.
 
Ответить
Сообщение
словарем посчитать дубли

тоже думал про словарь, уникальные вроде немного понятно как, а как дубли соображу.

Автор - and_evg
Дата добавления - 30.08.2017 в 15:04
RAN Дата: Среда, 30.08.2017, 16:30 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Эта проверка нужна будет только периодически при стечении определенных обстоятельств

допстолбец будет постоянно нагружать

Суперактуально для разовой проверки! hands yes


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Эта проверка нужна будет только периодически при стечении определенных обстоятельств

допстолбец будет постоянно нагружать

Суперактуально для разовой проверки! hands yes

Автор - RAN
Дата добавления - 30.08.2017 в 16:30
_Boroda_ Дата: Среда, 30.08.2017, 17:52 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
как выбрать только дубли и засунуть их в массив

уникальные вроде немного понятно как, а как дубли соображу.

Например, вот такой вариант
[vba]
Код
Sub ttt()
    r0_ = 2
    r1_ = Range("B" & Rows.Count).End(3).Row
    n_ = r1_ - r0_ + 1
    ar = Range("B" & r0_).Resize(n_)
    Set Slov = CreateObject("Scripting.Dictionary")
    Set Slov1 = CreateObject("Scripting.Dictionary")
    On Error Resume Next
    For i = 1 To n_
        Slov.Add ar(i, 1), ""
        If Err Then
            Err.Clear
            aaa = Slov1.Item(CStr(ar(i, 1)))
        End If
    Next
    On Error GoTo 0
    ActiveSheet.Range("A1:B" & r1_).AutoFilter Field:=2, Criteria1:=Slov1.Keys(), Operator:=xlFilterValues
End Sub
[/vba]
К сообщению приложен файл: 2595578_1.xls (45.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
как выбрать только дубли и засунуть их в массив

уникальные вроде немного понятно как, а как дубли соображу.

Например, вот такой вариант
[vba]
Код
Sub ttt()
    r0_ = 2
    r1_ = Range("B" & Rows.Count).End(3).Row
    n_ = r1_ - r0_ + 1
    ar = Range("B" & r0_).Resize(n_)
    Set Slov = CreateObject("Scripting.Dictionary")
    Set Slov1 = CreateObject("Scripting.Dictionary")
    On Error Resume Next
    For i = 1 To n_
        Slov.Add ar(i, 1), ""
        If Err Then
            Err.Clear
            aaa = Slov1.Item(CStr(ar(i, 1)))
        End If
    Next
    On Error GoTo 0
    ActiveSheet.Range("A1:B" & r1_).AutoFilter Field:=2, Criteria1:=Slov1.Keys(), Operator:=xlFilterValues
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 30.08.2017 в 17:52
and_evg Дата: Четверг, 31.08.2017, 06:39 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, Спасибо! Если я правильно понял, то при добавлении в первый словарь если попадается дубль, то возникает ошибка и тогда добавляется во второй словарь?
 
Ответить
Сообщение_Boroda_, Спасибо! Если я правильно понял, то при добавлении в первый словарь если попадается дубль, то возникает ошибка и тогда добавляется во второй словарь?

Автор - and_evg
Дата добавления - 31.08.2017 в 06:39
and_evg Дата: Четверг, 31.08.2017, 06:47 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
И ещё получается, что в автофильтр можно передавать и словарь!
 
Ответить
СообщениеИ ещё получается, что в автофильтр можно передавать и словарь!

Автор - and_evg
Дата добавления - 31.08.2017 в 06:47
_Boroda_ Дата: Четверг, 31.08.2017, 09:14 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
при добавлении в первый словарь если попадается дубль, то возникает ошибка и тогда добавляется во второй словарь

Совершенно верно. Обратите внимание на методы добавления - первый генерит ошибку при дубляже, а второй добавляет только ключ и при дубле тупо его игнорит
в автофильтр можно передавать и словарь

Нууу, не совсем словарь. Мы передаем массив ключей


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
при добавлении в первый словарь если попадается дубль, то возникает ошибка и тогда добавляется во второй словарь

Совершенно верно. Обратите внимание на методы добавления - первый генерит ошибку при дубляже, а второй добавляет только ключ и при дубле тупо его игнорит
в автофильтр можно передавать и словарь

Нууу, не совсем словарь. Мы передаем массив ключей

Автор - _Boroda_
Дата добавления - 31.08.2017 в 09:14
and_evg Дата: Четверг, 31.08.2017, 09:27 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, немного не пойму вот эту строчку[vba]
Код
Slov.Add ar(i, 1), ""
[/vba]ведь ar()судя по этой строчке[vba]
Код
ar = Range("B" & r0_).Resize(n_)
[/vba] это одномерный массив?
 
Ответить
Сообщение_Boroda_, немного не пойму вот эту строчку[vba]
Код
Slov.Add ar(i, 1), ""
[/vba]ведь ar()судя по этой строчке[vba]
Код
ar = Range("B" & r0_).Resize(n_)
[/vba] это одномерный массив?

Автор - and_evg
Дата добавления - 31.08.2017 в 09:27
_Boroda_ Дата: Четверг, 31.08.2017, 09:45 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Не совсем. При считывании из ячеек в массив последний всегда получается двумерным. Когда Вы делаете массив из диапазона А1:С9, то получаете массив (9,3), а когда из диапазона А1:А9, то получаете массив (9,1)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе совсем. При считывании из ячеек в массив последний всегда получается двумерным. Когда Вы делаете массив из диапазона А1:С9, то получаете массив (9,3), а когда из диапазона А1:А9, то получаете массив (9,1)

Автор - _Boroda_
Дата добавления - 31.08.2017 в 09:45
and_evg Дата: Четверг, 31.08.2017, 09:47 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 496
Репутация: 100 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, Хммм... Спасибо. Не знал
 
Ответить
Сообщение_Boroda_, Хммм... Спасибо. Не знал

Автор - and_evg
Дата добавления - 31.08.2017 в 09:47
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!