Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
Comanche
1

Как красиво определить наличие дубликатов в столбце Листа Excel?

13.01.2009, 01:08. Показов 4654. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
См. сабж.
По-моему, эта тема где-то уже обсуждалась, но что-то не нашёл я её.
'Красиво' - это без тупого перебора во вложенных циклах и т.п.

Спасибо.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2009, 01:08
Ответы с готовыми решениями:

Excel Макрос массового удаления дубликатов в одном столбце в череде многих
Добрый день, вчера весь день искал себе подходящий способ решения своей задачи, но так и не нашел...

Проверка на наличие листа Excel
Private Sub CommandButton1_Click() if 'лист2 отсутствует Else: CheckBox1.Visible = False...

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

Как определить номер строки в столбце в VB Excel
Здраствуйте! Столкнулся со следующей проблемой: Есть колонка, содержащая данные в след виде ...

3
Comanche
13.01.2009, 14:26 2
Пока придумал следующее:
Столбец с данными, который мне надо проверить на наличие дубликатов, сортирую и затем делаю по нему Итоги, указывая в качестве операции 'Количество значений'. Там, где оно будет больше единицы - имеются дубликаты.
Чтобы не портить исходный Лист, нужный мне столбец копирую в отдельный лист Книги, который до этого момента был скрытым. И именно на этом вспомогательном Листе делаю все сортировки и Итоги. После выполнения всех операций этот лист чищу и опять прячу. На всё время выполнения этих действий запрещаю обновление экрана, чтобы не мельтешило перед глазами.
Не знаю, насколько это красиво, но работает оно быстрее всяких переборов, да и места вроде немного занимает:
Visual Basic
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
    mem = ActiveSheet.Name
    Application.Cursor = xlWait
    Application.ScreenUpdating = False
    Range('B:B').Copy
    Worksheets('Лист1').Visible = True
    Worksheets('Лист1').Select
    Range('B1').PasteSpecial Paste:=xlPasteValues
    Range('B1').Font.Bold = True
    Range('B1:B' + Trim(Str(numA - 1))).Select
    Selection.Sort Key1:=Range('B1'), Order1:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Selection.Subtotal GroupBy:=1, Function:=xlCount, TotalList:=Array(1), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    rw = Worksheets('Лист1').UsedRange.Rows.Count
    For i = 2 To rw
        If Not IsEmpty(Cells(i, 2)) And i <> rw Then
            tot = Cells(i, 3)  '  <<< значит, правее стоит Итог
            If tot > 1 Then
                Debug.Print 'Значение ' + Cells(i - 1, 3) + ' встречается' + Str(tot) + ' раз(а)'
            End If
        End If
    Next i
    Rows('1:' + Trim(Str(rw))).Select
    Selection.Delete Shift:=xlUp
    Range('A1').Select
    Worksheets('Лист1').Visible = False
    Worksheets(mem).Select
    Application.ScreenUpdating = True
    Application.Cursor = xlDefault
В этом коде предполагается, что проверяемые данные находятся в столбце 'B' активного Листа. Обнаруженные дубликаты никак не обрабатываются, а просто выводятся через Debug.Print.

Если у кого есть ещё какие идеи получше - будет интересно узнать.
1 / 1 / 0
Регистрация: 27.08.2008
Сообщений: 154
13.01.2009, 20:12 3
Range(<your Column>).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range(<the same your Column>), Unique:=True
0
Comanche
13.01.2009, 22:47 4
2Korolana:
Снимаю шляпу...

Как и всегда, ваш ответ в этом форуме отличается лаконичностью и бьёт в десятку!

Вашим методом нельзя создать список тех значений в колонке, у которых
обнаружены дубликаты, но зато факт НАЛИЧИЯ таких дубликатов отлавливается, в прямом смысле, в одну строчку. Остаётся сравнить число рядов до и после применения автофильтра - и всех дел!

В конце концов, на этом можно экономить время: если ваш метод показывает, что дубликатов НЕТ, то БЫСТРО переходим к обработке данных, уникальность которых теперь уже гарантирована. Если же дубликаты есть (что случается у меня гораздо реже), то можно выполнить мой код или ещё что-нибудь в этом роде...

Спасибо!
13.01.2009, 22:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2009, 22:47
Помогаю со студенческими работами здесь

Как задать соответствие одних значений, одного листа Excel, значениям другого листа Excel
Есть лист Excel ,значения в нем постоянны и находятся на одном месте (в одном столбце и в одной...

Как определить название листа Excel
Привет всем! В моей программе есть необходимость открывать в DataGridView данные из Excel. Делаю...

Определить наличие записи в столбце БД
Суть очень простая существует база данных на удаленном ПК, крутящаяся на SQL server 2012, внутри...

Как сделать проверку наличие листа?
Нужна помощь в написании формулы, смысл такой: листы в книге пронумерованы 1,2,3,4...31 (дни...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru