Excel vba поиск значения в диапазоне - IT Справочник
Llscompany.ru

IT Справочник
31 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Excel vba поиск значения в диапазоне

Поиск на листе Excel

Поиск какого-либо значения в ячейках Excel довольно часто встречающаяся задача при программировании какого-либо макроса. Решить ее можно разными способами. Однако, в разных ситуациях использование того или иного способа может быть не оправданным. В данной статье я рассмотрю 2 наиболее распространенных способа.

Поиск перебором значений

Довольно простой в реализации способ. Например, найти в колонке «A» ячейку, содержащую «123» можно примерно так:

Минусами этого так сказать «классического» способа являются: медленная работа и громоздкость. А плюсом является его гибкость, т.к. таким способом можно реализовать сколь угодно сложные варианты поиска с различными вычислениями и т.п.

Поиск функцией Find

Гораздо быстрее обычного перебора и при этом довольно гибкий. В простейшем случае, чтобы найти в колонке A ячейку, содержащую «123» достаточно такого кода:

Вкратце опишу что делают строчки данного кода:
1-я строка: Выбираем в книге лист «Данные»;
2-я строка: Осуществляем поиск значения «123» в колонке «A», результат поиска будет в fcell;
3-я строка: Если удалось найти значение, то fcell будет содержать Range-объект, в противном случае — будет пустой, т.е. Nothing.

Полностью синтаксис оператора поиска выглядит так:

Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

What — Строка с текстом, который ищем или любой другой тип данных Excel

After — Ячейка, после которой начать поиск. Обратите внимание, что это должна быть именно единичная ячейка, а не диапазон. Поиск начинается после этой ячейки, а не с нее. Поиск в этой ячейке произойдет только когда весь диапазон будет просмотрен и поиск начнется с начала диапазона и до этой ячейки включительно.

LookIn — Тип искомых данных. Может принимать одно из значений: xlFormulas (формулы), xlValues (значения), или xlNotes (примечания).

LookAt — Одно из значений: xlWhole (полное совпадение) или xlPart (частичное совпадение).

SearchOrder — Одно из значений: xlByRows (просматривать по строкам) или xlByColumns (просматривать по столбцам)

SearchDirection — Одно из значений: xlNext (поиск вперед) или xlPrevious (поиск назад)

MatchCase — Одно из значений: True (поиск чувствительный к регистру) или False (поиск без учета регистра)

MatchByte — Применяется при использовании мультибайтных кодировок: True (найденный мультибайтный символ должен соответствовать только мультибайтному символу) или False (найденный мультибайтный символ может соответствовать однобайтному символу)

SearchFormat — Используется вместе с FindFormat. Сначала задается значение FindFormat (например, для поиска ячеек с курсивным шрифтом так: Application.FindFormat.Font.Italic = True), а потом при использовании метода Find указываем параметр SearchFormat = True. Если при поиске не нужно учитывать формат ячеек, то нужно указать SearchFormat = False.

Чтобы продолжить поиск, можно использовать FindNext (искать «далее») или FindPrevious (искать «назад»).

Примеры поиска функцией Find

Пример 1: Найти в диапазоне «A1:A50» все ячейки с текстом «asd» и поменять их все на «qwe»

Обратите внимание : Когда поиск достигнет конца диапазона, функция продолжит искать с начала диапазона. Таким образом, если значение найденной ячейки не менять, то приведенный выше пример зациклится в бесконечном цикле. Поэтому, чтобы этого избежать (зацикливания), можно сделать следующим образом:

Пример 2: Правильный поиск значения с использованием FindNext, не приводящий к зацикливанию.

В ниже следующем примере используется другой вариант продолжения поиска — с помощью той же функции Find с параметром After. Когда найдена очередная ячейка, следующий поиск будет осуществляться уже после нее. Однако, как и с FindNext, когда будет достигнут конец диапазона, Find продолжит поиск с его начала, поэтому, чтобы не произошло зацикливания, необходимо проверять совпадение с первым результатом поиска.

Пример 3: Продолжение поиска с использованием Find с параметром After.

Следующий пример демонстрирует применение SearchFormat для поиска по формату ячейки. Для указания формата необходимо задать свойство FindFormat.

Пример 4: Найти все ячейки с шрифтом «курсив» и поменять их формат на обычный (не «курсив»)

Примечание: В данном примере намеренно не используется FindNext для поиска следующей ячейки, т.к. он не учитывает формат (статья об этом: https://support.microsoft.com/ru-ru/kb/282151)

Коротко опишу алгоритм поиска Примера 4. Первые две строки определяют последнюю строку (lLastRow) на листе и последний столбец (lLastCol). 3-я строка задает формат поиска, в данном случае, будем искать ячейки с шрифтом Italic. 4-я строка определяет область ячеек с которой будет работать программа (с ячейки A1 и до последней строки и последнего столбца). 5-я строка осуществляет поиск с использованием SearchFormat. 6-я строка — цикл пока результат поиска не будет пустым. 7-я строка — меняем шрифт на обычный (не курсив), 8-я строка продолжаем поиск после найденной ячейки.

Хочу обратить внимание на то, что в этом примере я не стал использовать «защиту от зацикливания», как в Примерах 2 и 3, т.к. шрифт меняется и после «прохождения» по всем ячейкам, больше не останется ни одной ячейки с курсивом.

Свойство FindFormat можно задавать разными способами, например, так:

Следующий пример — применение функции Find для поиска последней ячейки с заполненными данными. Использованные в Примере 4 SpecialCells находит последнюю ячейку даже если она не содержит ничего, но отформатирована или в ней раньше были данные, но были удалены.

Пример 5: Найти последнюю колонку и столбец, заполненные данными

В этом примере используется UsedRange, который так же как и SpecialCells возвращает все используемые ячейки, в т.ч. и те, что были использованы ранее, а сейчас пустые. Функция Find ищет ячейку с любым значением с конца диапазона.

При поиске можно так же использовать шаблоны, чтобы найти текст по маске, следующий пример это демонстрирует.

Пример 6: Выделить красным шрифтом ячейки, в которых текст начинается со слова из 4-х букв, первая и последняя буквы «т», при этом после этого слова может следовать любой текст.

Для поиска функцией Find по маске (шаблону) можно применять символы:
* — для обозначения любого количества любых символов;
? — для обозначения одного любого символа;

— для обозначения символов *, ? и

. (т.е. чтобы искать в тексте вопросительный знак, нужно написать

?, чтобы искать именно звездочку (*), нужно написать

* и наконец, чтобы найти в тексте тильду, необходимо написать

Поиск даты с помощью Find

Если необходимо найти текущую дату или какую-то другую дату на листе Excel или в диапазоне с помощью Find, необходимо учитывать несколько нюансов:

  • Тип данных Date в VBA представляется в виде #[месяц]/[день]/[год]#, соответственно, если необходимо найти фиксированную дату, например, 01 марта 2018 года, необходимо искать #3/1/2018#, а не «01.03.2018»
  • В зависимости от формата ячеек, дата может выглядеть по-разному, поэтому, чтобы искать дату независимо от формата, поиск нужно делать не в значениях, а в формулах, т.е. использовать LookIn:=xlFormulas
Читать еще:  Импорт xml в excel vba

Приведу несколько примеров поиска даты.

Пример 7: Найти текущую дату на листе независимо от формата отображения даты.

Пример 8: Найти 1 марта 2018 г.

Искать часть даты — сложнее. Например, чтобы найти все ячейки, где месяц «март», недостаточно искать «03» или «3». Не работает с датами так же и поиск по шаблону. Единственный вариант, который я нашел — это выбрать формат в котором месяц прописью для ячеек с датами и искать слово «март» в xlValues.

Тем не менее, можно найти, например, 1 марта независимо от года.

Пример 9: Найти 1 марта любого года.

Excel VBA функция для поиска значения в диапазоне ячеек

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

В чистых формулах excel это просто:

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

Я называю этот диапазон именами строк и столбцов как первую строку и столбец соответственно.

таким образом, переменная Excel будет называться test_table.

хотите написать функцию VBA, которую я могу вызвать с помощью:

на данный момент я использую python с DataNitro и pandas, чтобы легко сделать это сращивание. Не очень хорошо в VBA, так что написание этого в VBA займет довольно много времени. Конечно, я не первый и не единственный, кто ищет эту функциональность, но поиск google, похоже, никуда меня не приведет.

Не хочу отвечать на свой собственный вопрос, но мое решение до сих пор (адаптированное из ответа @John Bustos ниже) таково::

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

1 Ответ

Это должно сделать его:

Обратите внимание, что я не ставил никаких проверок ошибок и т. д., Что было бы хорошей практикой!

Похожие вопросы:

Есть ли функция или такая вещь в VBA, чтобы найти различные значения в диапазоне ? В противном случае, я думаю, я просто напишу Sub, используя коллекцию, но это звучит немного излишне. Я никогда не.

Знаете ли вы какой-нибудь Excel VBA, который подсчитывает количество заполненных ячеек (с текстом/числом или комбинациями текста+число)? Я попробовал =countif(A2:A2000,1=1) (с общим критерием.

Я пытаюсь настроить формулу в excel/vba, которая позволит мне вводить диапазон ячеек и выводить в одной ячейке независимо от того, есть ли какие-либо константы в этом диапазоне. Его очень легко.

Привет, я новичок в excel, поэтому, пожалуйста, терпите мое невежество. Недавно я обнаружил, что мне нужна функция, которая подсчитывает количество слов в диапазоне ячеек (считая пустые ячейки как.

Мне нужно автоматизировать формирование экспортированного листа excel с переменными строками и переменными столбцами. Это кажется таким простым, но я в тупике. Мне просто нужно добавить границы для.

Я пытаюсь найти формулу в Excel VBA, которая будет подсчитывать количество чисел в диапазоне ячеек. Я пробовал формулу, но она подсчитывает только количество чисел в одной ячейке. Может ли.

Я пытаюсь создать функцию прогнозирования в excel, используя на основе набора предварительно зарегистрированных исторических данных. Я новичок в VBA и я не могу сделать эту функцию. У меня есть три.

Следующая функция VBA подсчитывает количество ячеек, содержащих формулы в заданном диапазоне. Он работает правильно при вызове из суб VBA. При вызове из Excel он возвращает общее количество ячеек в.

В VBA / VB.NET вы можете назначить значения диапазона Excel массиву для более быстрого доступа / манипуляции. Есть ли способ эффективно назначить другие свойства ячейки (например, top, left, width.

Я ищу способ подсчета непустого элемента в массиве 2 измерений. Я прочитал решение здесь VBA count непустые элементы массива . Однако я думаю, что может быть лучший способ или функция для его.

Конференция VBStreets

Весь вкус программирования!

  • Список форумовСмежные технологииVBA
  • Изменить размер шрифта
  • FAQ
  • Вход

Поиск ячейки и замена значения в строке листа VBA EXCEL

Поиск ячейки и замена значения в строке листа VBA EXCEL

khall » 23.02.2006 (Чт) 9:51

Помогите, пожалуйста, с задачкой.
Как найти ячейку со значением, например, город, и очистить эту ячейку, а также зависимые с ней ячейки, расположенные на той же строке, что и найденная ячейка в диапазоне G8:G43 и E8:E43?

Этот код очищает все найденные ячейки со значением город, но не очищает те ячейки, которые находятся в той строке, что и ячейка со значением город.
Sub Поиск()

Dim c As Range
For Each c In [I8:I43]
If c.Value Like «город» Then
c.Value = «»
End If
Next
End Sub

Может быть так или есть код покрасивее? При этом остается проблема: если курсор не находится в ячейке диапазона I8:J20, появляется сообщение об ошибке. Ошибка появляется и тогда, когда в ячейках больше нет данных в диапазоне I8:J20. Как это все исправить?

Public Sub Поиск2()

Dim rng As Range

Set rng = Range(«I8:J20″).Find(What:=»город», After:=ActiveCell, LookIn:=xlValues, _
MatchCase:=True)
Range(«I8:J20»).FindNext(After:=ActiveCell).Activate

If Not (rng Is Nothing) Then
Cells(ActiveCell.Row, ActiveCell.Column — 1).Select
ActiveCell = «»
Cells(ActiveCell.Row, ActiveCell.Column — 1).Select
ActiveCell = «»
Cells(ActiveCell.Row, ActiveCell.Column + 4).Select
ActiveCell = «»
Else
MsgBox «Не найдено значение»
End If

Ниже все в одном файле

GSerg » 23.02.2006 (Чт) 11:38

Код: Выделить всё Sub sdfsdf()
Dim f As Excel.Range, w As Excel.Range

Set w = Range(«I8:I43»)
Set f = w.Find(«город», , xlValues, xlWhole)

Do Until f Is Nothing
Range(f.Offset(0, -4), f).Value = Empty
Set f = w.FindNext
Loop
End Sub

Усовершенствование кода предыдущей задачи

khall » 24.02.2006 (Пт) 8:31

Код работает просто СУППЕР! Я его поместил в стандартный модуль Module1 с названием процедуры Поиск. К нему обращаются процедуры рабочих листов при наступлении события Worksheet_Change любого активного рабочего листа через Call Поиск. Теперь при наступлении изменения в ячейках D62 или D63, а соответственно и D65, автоматически удаляются названия «Телефон» и «город», а также сумма в грн. Это приводит к появлению только одной записи. Это мне и нужно!

Вот код рабочего листа Лист1. Такой же код присутствует и в других листах: Лист2.

В будущем, пожалуйста, проявляйте уважение к читающим и пользуйтесь форматированием кода.
Код: Выделить всё Private Sub Worksheet_Change(ByVal Target As Range)

Dim тф As Range, i As String
Set тф = Range(«D62:D65»)

If Not (Application.Intersect(Target, тф) Is Nothing) Then
Call Поиск

Читать еще:  Кол во символов в ячейке excel

i = 8
While Sheets(«Лист1»).Range(«E» + LTrim$(Str$(i))) <> «»
i = i + 1
Wend
Sheets(«Лист1»).Range(«E» + LTrim$(Str$(i))) = Range(«D65»).Value
Sheets(«Лист1»).Range(«G» + LTrim$(Str$(i))) = «Телефон»
Sheets(«Лист1»).Range(«I» + LTrim$(Str$(i))) = «город»
End If

Стандартный модуль
Код: Выделить всё Public Sub Поиск()

Dim f As Excel.Range, w As Excel.Range

Set w = Range(«I8:J20»)
Set f = w.Find(«город», , xlValues, xlWhole)

Do Until f Is Nothing
Range(f.Offset(0, -4), f).Value = Empty
Set f = w.FindNext
Loop
End Sub

Но я обнаружил особенность, которую теперь нужно устранить.
Иногда может получиться, что или ячейка D62 или D63 могут стать пустыми, что сделает пустой и ячейку D65. В этом случае значение ячейки, содержащей сумму расхода в грн. «Телефон» и «город», очищается, но остаются названия «Телефон» и «город» в ячейках столбцов G и I.

ВОПРОС: Как сделать, чтобы при удалении значения из ячейки с суммой в грн. удалялись и теперь ненужные записи «Телефон» и «город», которые были связаны с удаленной записью суммы в грн.

Как усовершенствовать код?

GSerg » 24.02.2006 (Пт) 13:21

khall » 24.02.2006 (Пт) 14:09

GSerg » 24.02.2006 (Пт) 14:48

khall » 24.02.2006 (Пт) 15:04

Спасибо тебе за терпение! Я только учусь!
Кое-что будет экспериментом.
Во всяком случае, спасибо за твой код, который работает исключительно.
Код: Выделить всё Public Sub Поиск()

Dim f As Excel.Range, w As Excel.Range

Set w = Range(«I8:J20»)
Set f = w.Find(«город», , xlValues, xlWhole)

Do Until f Is Nothing
Range(f.Offset(0, -4), f).Value = Empty
Set f = w.FindNext
Loop
End Sub

khall » 24.02.2006 (Пт) 15:05

GSerg » 24.02.2006 (Пт) 15:11

khall » 24.02.2006 (Пт) 16:12

Igor[hw] » 14.08.2006 (Пн) 13:25

А как можно сделать поиск двух разных слов например «город» и «улица» ?

alibek » 14.08.2006 (Пн) 13:28

Igor[hw] » 14.08.2006 (Пн) 15:15

Vladimir87 » 08.11.2006 (Ср) 21:25

Извлечение уникальных значений из диапазона ячеек или массива

Функция UniqueValuesFromArray позволяет найти в указанном столбце двумерного массива все уникальные значения, и получить новый массив, содержащий все найденные уникальные значения.
Это может пригодиться, если надо, к примеру, заполнить ComboBox на форме возможными вариантами значений из базы данных:

Код самой функции:

Во вложении — пример использования этой функции в макросе (вывод уникальных записей в другой столбец листа), и пользовательская функция Уникальныедля использования в формулах листа Excel.

Макрос и дополнительная функция из файла во вложении:

  • 63630 просмотров

Комментарии

Благодарю за Вашу работу. Столкнулся с проблемой выборки дубликатов из массива около 80000 строк и записью строки из 6 значений другого массива на лист ошибок. Решил вопрос доработкой функции UniqueValuesFromArray плюс быстрый поиск ArraySearchResults. Временные показатели очень порадовали 40 секунд вместо 10 минут перебора и выборки из другого массива. Прошу дополнить страницу или создать новую с функцией DoubleValuesFromArray (Поиск уникальных ПОВТОРЯЮЩИХСЯ значений в массиве)

Еще раз спасибо за Вашу работу. Выручали не раз.

Игорь, спасибо!
Подскажите, как доработать функцию так, чтобы уникальные значения переносились в том формате, в котором они находились в начальном массиве? В моем случае начальный массив — это числа, которые выгружаются из другой программы и не отформатированы, как числа, в то время, как переносятся они в виде чисел. Из-за этого в последствии не работает функция ВПР.
Или может быть лучше сделать так, чтобы функция сначала преобразовывала начальный массив в числа и только потом переносила уникальные?

Это потому что вы в другой файл перенесли только часть кода (а код функции UniqueValuesFromArray забыли скопировать)

Добрый день!
На родном файле макрос работает отлично, на другом, с тем же расширением не работает, выдает ошибку Sub or Function not defined на UniqueValuesFromArray. В чем может быть причина?
Расширения обоих файлов поменял на .xlsm
Спасибо!

РАЗОБРАЛСЯ.
СПАСИБО БОЛЬШОЕ ЗА ФУНКЦИЮ1111111

Нет.
выглядит так:
А B
1 текст 1 текст 1
2 текст 2 текст 2
3 текст 3 текст 3
4 текст 4 текст 4
5 текст 5 текст 5
6 текст 6 текст 6
7 текст 7 текст 7
.
33 текст 33 текст 33
34 текст 34 текст 34
35 текст 35 текст 1
36 текст 36 текст 1
37 текст 37 текст 1
и так делее
Т.е. в столбце А я вставил только уникальные значения до строки 80 (текст 80), но на 35 строке функция перестает работать как-будто, может я что не так сделал?
Помогите пожалуйста, я могу это сделать формулами, ног проблема в нагрузке, в моем файле просматриваемый массив имеет длину 2000 строк, excel умирает на расчетах.(((((

Видимо, 36-е значение (которое «первое уникальное») — только с виду похоже на первое
(например, есть лишний пробел, или одна русская буква заменена похожей английской)

Сравнить посимвольно 2 ячейки можно этой надстройкой:
http://excelvba.ru/tools/CharCodes

Добрый день.
Сразу скажу, что в макросах не че не понимаю.
Мне очень понравилась ваша функция, но появилась проблема.
Функция выбирает 35 уникальных значений, далее возвращает первое уникальное.
В чем проблема?

В статье написано:

пользовательская функция — для использования в качестве формулы массива

выделяете НЕСКОЛЬКО ячеек, вводите эту формулу, и завершаете ввод нажатием Ctrl + Shift + Enter (вместо обычного Enter)
Тогда будет выводиться несколько уникальных значений

А вообще, уникальные можно и формулами вывести, без макросов.

Доброго времени суток. Макрос у меня заработал отлично а вот функция «Уникальные» почему то работает только в файле примере Unique.xls. Ситуация такая: все как положено добавил функцию в модуль, но она на отрез отказывается корректно работать, вместо уникальных значений выдает первое попавшееся значение причем оно возвращается во всех ячейках где прописана функция. Помогите пожалуйста разобраться.

Не знаю, увидите ли вы, но спасибо!
И автору тоже!

Добрый вечер. Разбираю макрос, который здесь представлен. С VBA не работала. Можно ли усложнить функцию вывода уникальных: вывод за период временной с исключением каких-то уникальных значений, т.е. возможно это значение встречается в этот период несколько раз, но выводить его не надо, так как не интересно. Буду очень благодарна за помощь

Добрый день. Разбираю сейчас Ваш макрос. Не сильна в них. Прошу помочь. В целом все работает отлично, но не могу понять как поменять его, чтобы новый массив уникальных вставал на другой (заданный) лист и не столбцом, а строкой. Буду очень признательна за помощь.

Тут самое главное, вот это: On Error Resume Next: Dim coll As New Collection
то есть при ошибке продолжить заполнение коллекции, а так как в коллекцию добавляется ключ такой же как и само значение
txt$ = Trim(cell): If Len(txt$) Then coll.Add txt$, txt$ ‘коллекция.добавить значение, ключ
то в коллекции автоматически остается только один уникальный ключ, по определению, и вместе с ним одно уникальное значение

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

Читать еще:  Как сделать sql запрос в excel

Здравствуйте!
Давно пытаюсь найти решение подобной задачи. Знаний к сожалению не хватает. И вот нашёл Ваш пример. У меня задача хоть и подобная но масштабы больше. В одной книге есть 2 листа:
1 лист (таблица заказов) имеет 159 столбцов с данными, 165 столбец с датой. Каждый столбец с данными пронумерован № продукции 0001,0002,0003, и т.д.0159.
2 лист (отчёт) В отчёте 2 столбец №-ра продукции построчно и 4 столбец для копирования данных продукции с 1 листа.
И вот надо решить задачу: как выбрать продукцию с 1 листа и скопировать во 2 лист по определённой дате заданной во 2 листе.
Вроде бы кажется, что всё просто, но ничего не получается. Прошу Вас подскажите как всё это решить.

Спасибо большое! Действительно быстро работает.
Единственное, что добавил — пропуск пустых ячеек:
For i = LBound(arr) To UBound(arr)
If Trim(arr(i, col)) = «» Then GoTo 1
txt$ = Trim(arr(i, col)): coll.Add txt$, txt$
1: Next i

Вопрос не актуален.
Прочитал ниже, что мне надо использовать http://excelvba.ru/code/JoinedArray

Function UniqueValuesFromArray может возвращать массив размерностью исходного массива, а не размерностью N * 1?

В дополнительном столбце, при помощи формулы типа =СЦЕПИТЬ(A1;»//»;B1), объедините значения этих 2 столбцов,
и потом по этому доп.столбцу отбирайте уникальные

Подскажите пожалуйста, как изменить ваши процедуры, чтобы можно было выбрать уникальные значения не одного столбца, а нескольких. Например в Стобце A значения а,в,а,в. В столбце B в соседних ячейках значения с,д,с,е. Нужно чтобы макрос вдавал массив: В первом столбце: а,в,в. В соседнем с,д,е.

Спасибо! Очень помогло.

Спасибо за функцию.
Работает отлично.
Это уже вторая Ваша функция в течение двух дней, которую я применил в своей работе.
Завтра еще третью буду пробовать — поиск в массиве 🙂

Здравствуйте EducatedFool (Игорь). Мне очень понравилась ваша функция (
Извлечение уникальных значений из диапазона ячеек или массива), но меня еще больше заинтересовал ответ #3, в котором прикреплен пример (Пример в файле: http://excelvba.ru/XL_Files/Sample__21-08-2011__17-14-22.zip).
Вопрос по данной функции, а можно сделать чтобы поиск уникальных значений ввелся с конца массива? И значение записывалось первое найденное в конце массива?
Спасибо за ответ

Да, пример Sample__21-08-2011__17-14-22.zip — самое то.

Еще раз большое спасибо!

Спасибо. Буду изучать.

Так сделать можно, но.
одно дело — выбрать уникальные значения (тут всё ясно, вариантов особо нет),
и совсем другое — выбрать строки с уникальными значениями в каком-то столбце.

К примеру, есть у нас 3 строки с одинаковыми значениями в 1-м столбце.
Какую из этих трёх строк выводить в результат? Первую, третью, вторую?

Вообще, у меня есть уже такая функция (даже с большей функциональностью, чем вам требуется):
http://excelvba.ru/code/JoinedArray

Пример её использования для вашего случая:

Извините за надоедливость ))
Возни еще один вопрос.

Сейчас выборка уникальный происходит только по столбцу «A».
Возможно ли сделать выборку уникальных по столбцу «A», но с условием, чтобы в диапазон фильтрования попадали также столбцы B и C ?

Т.е. чтобы был аналог функционалу Excel 2007: Выделяю столбцы A,B,C => Данные => Удалить дубликаты => В качестве столбца, по которому будет происходить удаление дубликатов выбираю только столбец A.

Как результат: уникальные значения будут отобраны по столбцу «А», но соответствующие записи из столбцов B и C будут также сохранены.

Вроде разобрался:
Dim ПервыйСтолбец As Range: Set ПервыйСтолбец = Range(Sheets(«данные»).Range(«A1»), Sheets(«данные»).Range(«A» & Rows.Count).End(xlUp))

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

Я пробовал вот так, но макрос выдает ошибку:

Dim ПервыйСтолбец As Range: Set ПервыйСтолбец = Sheets(«данные»).Range([A1], Sheets(«данные»).Range(«A» & Rows.Count).End(xlUp))

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

Отличный пример использования коллекций для создания массива уникальных записей. Давно использую коллекции, но до этого сам не додумался. И работает быстро ))

Поиск значений в таблице «Excel» . Макрос.

Как выполнить поиск значений в программе «Excel» .

Далее описаны несколько вариантов поиска и фильтрации данных в таблице «Эксель».

Классический поиск «MS Office».
Условное форматирование (выделение нужных ячеек цветом)
Настройка фильтров по одному или нескольким значениям.
Фрагмент макроса для перебора ячеек в диапазоне и поиска нужного значения.

1) Классический поиск (обыкновенный).

Вызвать панель (меню) поиска можно сочетанием горячих клавиш ctrl+F. (Легко запомнить: F- Found).

Окно поиска состоит из поля, в которое вводится искомый фрагмент текста или искомое число, вкладки с дополнительными настройками («Параметры») и кнопки «Найти».

Классический поиск в Excel

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

Условное форматирование для искомых ячеек.

2) Еще один вариант поиска заключается в выделении всех ячеек содержащих искомое слово каким-нибудь цветом.

Такой поиск реализуется через опцию условное форматирование.

Для форматирования ячеек следует выделить диапазон ячеек, которых нужно найти слово. Далее на вкладке «Главная» нажать кнопку «Условное форматирование».

Настройка форматирования для выделения искомых слов

В меню условного форматирования выбрать «Правила выделения ячеек» … «Текст содержит…».

В открывшемся окне указать искомое слово и цвет заливки ячейки. Нажать «ОК». Все ячейки, содержащие нужное слово будут окрашены.

3) Третий способ поиска слов в таблице «Excel» — это использование фильтров.

Фильтр устанавливается во вкладке «Данные» или сочетанием клавиш ctrl+shift+L. Настройка фильтра для поиска слов

Кликнув по треугольнику фильтра можно в контекстном меню выбрать пункт «Текстовые фильтры», далее «содержит…» и указать искомое слово.

После нажатия кнопки «Ок» на Экране останутся только ячейки столбца, содержащие искомое слово.

4) Способ поиска номер четыре — это макрос VBA для поиска (перебора значений).

В зависимости от назначения и условий использования макрос может иметь разные конфигурации, но основная часть цикла перебора VBA макроса приведена ниже.

Sub Poisk()

ruexcel.ru макрос проверки значений (поиска)

Dim keyword As String

keyword = «Искомое слово» ‘присвоить переменной искомое слово

On Error Resume Next ‘при ошибке пропустить

For Each cell In Selection ‘для всх ячеек в выделении (выделенном диапазоне)

If cell.Value = «» Then GoTo Line1 ‘если ячейка пустая перейти на «Line1″

If InStr(StrConv(cell.Value, vbLowerCase), keyword) > 0 Then cell.Interior.Color = vbRed ‘если в ячейке содержится слово окрасить ее в красный цвет (поиск)

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector