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

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

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

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

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

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

здравствуйте уважаемые!
помогите пожалуйста определить дубли (т.е. совпадающие значения) в строке, и если есть такие, то покрасить эти ячейки, например, в красный цвет
собственно, я предполагаю, что надо использовать For each для диапазона, но не понимаю, как написать/определить в этом диапазоне одинаковые элементы, т.е. что за функция определения совпадают или нет ячейки, как-то так
подскажите плииз!

дубли.rar

Последний раз редактировалось Bape}l{ka; 09.06.2011 в 13:26.
Bape}l{ka вне форума Ответить с цитированием
Старый 09.06.2011, 13:40   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Для определения дублей обычно словарём или коллекцией пользуются (на больших диапазонах быстрее), но можно привлечь и функцию листа СЧЕТЕСЛИ()

Так например, грубо:
Код:
Sub tt()
Dim r As Range, c As Range
For Each r In [a1:q82].Rows
For Each c In Intersect(Sheets(3).UsedRange, r)
If Application.CountIf(r, c) > 1 Then c.Interior.ColorIndex = 3
Next
Next
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.06.2011 в 13:53.
Hugo121 вне форума Ответить с цитированием
Старый 09.06.2011, 13:52   #3
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

а поподробнее про словарь или коллекцию?
можно пожалуйста на примере, а то так я не понимаю))
или же с функцией, строение ее понятно, но как ее применить? покажите плз на примере приложенного выше файла, чтоб я могла потыкать, сама поизменять

Последний раз редактировалось Bape}l{ka; 09.06.2011 в 14:06.
Bape}l{ka вне форума Ответить с цитированием
Старый 09.06.2011, 14:07   #4
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

спасибо большое, сча попробую

Hugo121, а вы могли бы пояснить для меня эти строки, что тут происходит?
For Each r In [a1:q82].Rows
For Each c In Intersect(Sheets(3).UsedRange, r)

Последний раз редактировалось Bape}l{ka; 09.06.2011 в 14:15.
Bape}l{ka вне форума Ответить с цитированием
Старый 09.06.2011, 14:08   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Условное форматирование для всего листа:
Вложения
Тип файла: rar дубли.rar (7.8 Кб, 18 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 09.06.2011, 14:22   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

На словаре сложнее получается...
Код:
Sub ttt()
Dim r As Range, c As Range, oDict As Object, i&, temp
For Each r In [a1:q82].Rows
Set oDict = CreateObject("Scripting.Dictionary")
i = 0
For Each c In Intersect(Sheets(3).UsedRange, r)
i = i + 1
temp = c.Value
If Len(temp) Then
If Not oDict.Exists(temp) Then
            oDict.Add temp, CStr(i)
    Else
c.Interior.ColorIndex = 3: r.Cells(oDict.Item(temp)).Interior.ColorIndex = 3
End If
End If
Next
Next
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.06.2011, 14:28   #7
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

Казанский
тоже спасибо большое, но на самом деле Hugo121 предложил как раз то что мне нужно, еще бы пояснения получить))
Bape}l{ka вне форума Ответить с цитированием
Старый 09.06.2011, 14:32   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так в первом коде пояснять нечего, раз Вы уже про for each осведомлены.
упс, заметил:
для каждого r в рядах/строках диапазона [a1:q82] (но r - это весь ряд!) так мне казалось, см. ниже
For Each r In [a1:q82].Rows
для каждого c в пересечении использованной области третьего листа с r
For Each c In Intersect(Sheets(3).UsedRange, r)

т.е. в итоге пробегаем построчно по нужным ячейкам.


А по второму (плюс к сказанному выше)- на каждом шаге цикла перебора строк заводим новый словарь, куда в цикле по строке помещаем значения ячеек с порядковым номером. Если такое значение уже есть - красим её (ячейку) и ту, порядковый номер которой в словаре.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.06.2011 в 17:10.
Hugo121 вне форума Ответить с цитированием
Старый 09.06.2011, 14:38   #9
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

нет, в целом что происходит, понятно, мне нужны частности, т.к. я в синтаксисе не очень понимаю:

For Each r In [a1:q82].Rows ---> для каждого r в диапазоне [a1:q82] - не понятно, что значит .Rows ?

For Each c In Intersect(Sheets(3).UsedRange, r) ---> тут не ясно, что такое Intersect(Sheets(3).UsedRange, r)

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

.Rows - это ряд.
Т.е. ряды, присутствующие в диапазоне. Но ряд получаем целиком, от A до IV или что там в 2007. - это неверно, см. ниже
Если бы написал для каждого r в диапазоне [a1:q82].cells - получили бы все ячейки этого диапазона, но Вам ведь нужны повторы в строках?

Intersect(Sheets(3).UsedRange, r)
Intersect - это наверное пересечение (не смотрел в переводчике).
UsedRange - использованная область.
Можно было бы вероятно и так написать:
Intersect(Sheets(3).[a1:q82], r)
Т.е. получаем общую область пересечения двух диапазонов - всего [a1:q82] и текущего ряда = ячейки ряда в [a1:q82].

Понятно объяснил?
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.06.2011 в 17:12.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как объединить значения дублей в одну ячейку azzaro Microsoft Office Excel 9 22.01.2011 14:45
поиск в строке Apis Помощь студентам 1 27.04.2010 22:30
поиск в строке Apis Паскаль, Turbo Pascal, PascalABC.NET 2 27.04.2010 22:05
поиск в строке Apis Общие вопросы C/C++ 1 27.04.2010 22:04
Удаление дублей 777grabber PHP 4 11.11.2009 17:21