Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 40

Работа с функциями Find и FindAll

24.11.2015, 14:58. Показов 6465. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Подскажите, пожалуйста, вариант написания кода для осуществления поиска множества повторяющихся значений из диапазона.

Есть рабочая таблица, где присутствуют повторяющиеся значения. Все повторы я подсветил заливкой через условное формативрование.
Мне нужно чтобы макрос, столкнувшись с подсвеченной ячейкой, осуществил поиск по столбцу на наличие всех повторов этой ячейки. Цель - выполнить определенное действие со всеми ячейками, которые являются дубликатами активной ячейки.

Функция Find теоретически выполняет данную работу, но поиск происходит поочередно и код получается как-то криво, а мне нужно разом найти все повторы, чтобы выделить их и, например, изменить цвет заливки.
Не могу разобраться, как это сделать через FindAll. Или всё таки можно красиво сделать и через Find?
В любом случае буду признателен за помощь.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.11.2015, 14:58
Ответы с готовыми решениями:

Как работает Array.Find и Array.FindAll
Здравствуйте, у меня возник вопрос по поводу класса Array и методов Find и FindAll. Видел такой синтаксис int a = Array.Find(mas, x =>...

Пролог работа с предикатом findall
Помогите пжлта, программа написана в прологе. С помощью предиката findall получите список всех мужчин призывного возраста (от 18 до 27 лет)...

Работа с функциями
Разработать функцию map, которая позволяет все символы верхнего регистра заменить на символы нижнего регистра в массиве символов. Функция...

10
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
24.11.2015, 15:23
Лучший ответ Сообщение было отмечено Falkner как решение

Решение

вот пример использования Find разбирайтесь, применяйте.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub ColorizeMax()
Dim Rng As Range, a As String
With Sheets("Лист")
 .Cells.Interior.ColorIndex = xlNone
    Set Rng = .Range("E4:E10,C4:C10").Find(what:=WorksheetFunction.Max(.Range("E4:E10,C4:C10")), LookIn:=xlValues, lookAt:=xlWhole)
    If Not Rng Is Nothing Then
     Rng.Interior.ColorIndex = 4
     a = Rng.Address'---запоминаем адрес первой найденной ячейки
'---цикл по следующим найденным ячейкам     
     Do 
       Set Rng = .Range("E4:E10,C4:C10").FindNext(Rng)
        If Rng.Address = a Then Exit Do
        Rng.Interior.ColorIndex = 4
     Loop
    End If
End With
End Sub
1
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
24.11.2015, 15:29
Цитата Сообщение от Falkner Посмотреть сообщение
Все повторы я подсветил заливкой через условное формативрование
Цитата Сообщение от Falkner Посмотреть сообщение
а мне нужно разом найти все повторы, чтобы выделить их и, например, изменить цвет заливки
Зачем нужно повторно выделять дубликаты ?
1
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 40
24.11.2015, 15:36  [ТС]
pashulka, В одной таблице может быть дважды значение А, трижды значение Б, четырежды В.

Подсветив все повторы, я вижу, что раз ячейка залита, то где-то у нее есть дубликат.
Например у меня активная ячейка А. Она залита цветом, значит есть повтор. Теперь мне нужно найти именно повторы А и сделать со всеми ними определенные действия, не касаясь Б и В и их дубликатов.


Кстати, на основе примера от Vlad999 получилось сделать примерно то, что хотел. Спасибо!
В FindAll я так и не разобрался, но, видимо, оно и не нужно.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
24.11.2015, 15:41
Falkner, а FindAll это кто?
Для выделения ячеек с определенным значением в столбце можно использовать автофильтр или Расширенный фильтр.
1
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
24.11.2015, 15:50
FindAll в vba нет такого, подозреваю вы нашли статью, она уже раньше поднималась. там пользовательская ф-ция если мне память не изменяет, а не штатная.
1
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
24.11.2015, 16:02
Falkner, Я намекал на то, что если ячейка A залита, то и все аналогичные дубликаты уже выделены цветом, стало быть менять цвет заливки - смысла нет, ибо УФ всё равно имеет приоритет. Другое дело, если Вы хотите сделать с ними что-то иное …
1
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 40
24.11.2015, 20:59  [ТС]
Vlad999, да, увидел такое по статье в сети. Просто в Excel есть функция "Найти", в ней же есть кнопка "Найти всё", с помощью которой можно сразу увидеть количество нужных ячеек и сделать с ними требуемые действия. Искал реализацию этих же действий в VBA.

pashulka, разумеется, с ячейками предполагаются и иные действия, просто нет смысла описывать сюда всю цепочку процедур (кому это интересно?)

Казанский, спасибо, но я пока не совсем понимаю, как использовать фильтры в VBA, чтобы автоматизировать нужные мне действия. Т.е. в данной ситуации я вижу выход именно в функции поиска.
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
24.11.2015, 21:25
Цитата Сообщение от Falkner Посмотреть сообщение
кому это интересно?
Отвечающему на вопрос

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub ColorMax() 'Microsoft Excel XP(и старше)
    Dim iSource As Range, iMax#
    Set iSource = Range("E4:E10,C4:C10")
 
    With Application
         iMax = .Max(iSource)
         .ReplaceFormat.Clear
         .ReplaceFormat.Interior.ColorIndex = 4
    End With
    
    iSource.Interior.ColorIndex = xlNone
    iSource.Replace iMax, iMax, ReplaceFormat:=True
End Sub
0
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
24.11.2015, 23:15
pashulka, максимума по задаче искать не нужно. просто у меня такой пример лежал вот и не правил, выложил, как образец.
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
24.11.2015, 23:28
Vlad999, Не поверите, но я внимательно прочитал задание и заметил, что речь там шла о повторах, а не максимуме, просто значений = макс тоже может быть несколько.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2015, 23:28
Помогаю со студенческими работами здесь

работа с функциями в С++ !!
помогите сделать задачу !нужно найти найбольший общий делитель пятинатуральных чисел !))) очень прошу сделайте кто нибуть !!!! ...

Работа с функциями
знаю что подобных заданий много, но я все равно не могу написать нужную функцию, прошу помощи задание ниже на скриншоте: требования...

Работа с функциями..!
Треугольник ABC задано координатами своих вершин на плоскости. Найти внутренние углы треугольника (в радианах). C++

Работа с функциями
Здравствуйте форумчане! У меня такая проблема: может кто-нибудь помочь упорядочить список студентов по возрастанию среднего балла? Как...

Работа с Функциями
Можете подсказать?Необходимо решить систему уравнений матрицы два на два по методу крамера. ax+by=u сx+dy=v Я вообще не вдупляю, как...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru