Vba excel find примеры

Поиск на листе 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

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

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

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

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

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

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

Источник: codernotes.ru

Метод Range.Find (Excel) Range.Find method (Excel)

Находит определенные сведения в диапазоне. Finds specific information in a range.

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Interested in developing solutions that extend the Office experience across multiple platforms? Ознакомьтесь с новой моделью надстроек Office. Check out the new Office Add-ins model. У надстроек Office мало места по сравнению с надстройками и решениями VSTO, которые можно создавать с помощью практически любой технологии веб-программирования, например HTML5, JavaScript, CSS3 и XML. Office Add-ins have a small footprint compared to VSTO Add-ins and solutions, and you can build them by using almost any web programming technology, such as HTML5, JavaScript, CSS3, and XML.

Синтаксис Syntax

выражение.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat) expression.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

выражение: переменная, представляющая объект Range. expression A variable that represents a Range object.

Параметры Parameters

Имя Name Обязательный или необязательный Required/Optional Тип данных Data type Описание Description
What What Обязательный Required Variant Variant Искомые данные. The data to search for. Может быть строкой или любым типом данных Microsoft Excel. Can be a string or any Microsoft Excel data type.
After After Необязательный Optional Variant Variant Ячейка, после которой нужно начать поиск. The cell after which you want the search to begin. Соответствует положению активной ячейки, когда поиск выполняется из пользовательского интерфейса. This corresponds to the position of the active cell when a search is done from the user interface.

Обратите внимание, что параметр After должен быть одной ячейкой в диапазоне. Notice that After must be a single cell in the range. Помните, что поиск начинается после этой ячейки; указанная ячейка не входит в область поиска, пока метод не возвращается обратно в эту ячейку. Remember that the search begins after this cell; the specified cell isn’t searched until the method wraps back around to this cell.

Если не указать этот аргумент, поиск начинается после ячейки в левом верхнем углу диапазона. If you do not specify this argument, the search starts after the cell in the upper-left corner of the range. LookIn LookIn Необязательный Optional Variant Variant Может быть одной из следующих констант XlFindLookIn: xlFormulas, xlValues, xlComments или xlCommentsThreaded. Can be one of the following XlFindLookIn constants: xlFormulas, xlValues, or xlComments. LookAt LookAt Необязательный Optional Variant Variant Может быть одной из следующих констант XlLookAt: xlWhole или xlPart. Can be one of the following XlLookAt constants: xlWhole or xlPart. SearchOrder SearchOrder Необязательный Optional Variant Variant Может быть одной из следующих констант XlSearchOrder: xlByRows или xlByColumns. Can be one of the following XlSearchOrder constants: xlByRows or xlByColumns. SearchDirection SearchDirection Необязательный Optional XlSearchDirection XlSearchDirection Направление поиска. The search direction. MatchCase MatchCase Необязательный Optional Variant Variant Значение True, чтобы выполнять поиск с учетом регистра. True to make the search case-sensitive. Значение по умолчанию — False. The default value is False. MatchByte MatchByte Необязательный Optional Variant Variant Используется только в том случае, если выбрана или установлена поддержка двухбайтовых языков. Used only if you have selected or installed double-byte language support. Значение True, чтобы двухбайтовые символы сопоставлялись только с двухбайтовым символами. True to have double-byte characters match only double-byte characters. Значение False, чтобы двухбайтовые символы сопоставлялись с однобайтовыми эквивалентами. False to have double-byte characters match their single-byte equivalents. SearchFormat SearchFormat Необязательный Optional Variant Variant Формат поиска. The search format.

Возвращаемое значение Return value

Объект Range, представляющий первую ячейку, в которой обнаружены требуемые сведения. A Range object that represents the first cell where that information is found.

Примечания Remarks

Этот метод возвращает значение Nothing, если совпадения не найдены. This method returns Nothing if no match is found. Метод Find не влияет на выделенный фрагмент или активную ячейку. The Find method does not affect the selection or the active cell.

Параметры для аргументов LookIn, LookAt, SearchOrder и MatchByte сохраняются при каждом использовании этого метода. The settings for LookIn, LookAt, SearchOrder, and MatchByte are saved each time you use this method. Если вы не укажете значения этих аргументов при следующем вызове метода, будут использоваться сохраненные значения. If you do not specify values for these arguments the next time you call the method, the saved values are used. Установка этих аргументов изменяет параметры в диалоговом окне Найти, а изменение параметров в диалоговом окне Найти приводит к изменению сохраненных значений, которые используются, если опустить аргументы. Setting these arguments changes the settings in the Find dialog box, and changing the settings in the Find dialog box changes the saved values that are used if you omit the arguments. Чтобы избежать проблем, устанавливайте эти аргументы явным образом при каждом использовании этого метода. To avoid problems, set these arguments explicitly each time you use this method.

Для повторения поиска можно использовать методы FindNext и FindPrevious. You can use the FindNext and FindPrevious methods to repeat the search.

Когда поиск достигает конца указанного диапазона поиска, он возвращается в начало диапазона. When the search reaches the end of the specified search range, it wraps around to the beginning of the range. Чтобы остановить поиск при этом возврате, сохраните адрес первой найденной ячейки, а затем проверьте адрес каждой последующей найденной ячейки, сравнив его с этим сохраненным адресом. To stop a search when this wraparound occurs, save the address of the first found cell, and then test each successive found-cell address against this saved address.

Чтобы найти ячейки, отвечающие более сложным шаблонам, используйте инструкцию For Each. Next с оператором Like. To find cells that match more complicated patterns, use a For Each. Next statement with the Like operator. Например, следующий код выполняет поиск всех ячеек в диапазоне A1:C5, где используется шрифт, имя которого начинается с букв Cour. For example, the following code searches for all cells in the range A1:C5 that use a font whose name starts with the letters Cour. Когда Microsoft Excel находит соответствующее значение, шрифт изменяется на Times New Roman. When Microsoft Excel finds a match, it changes the font to Times New Roman.

Пример Example

В этом примере показано, как найти все ячейки в диапазоне A1:A500 на листе 1, содержащие значение 2, и изменить его на 5. This example finds all cells in the range A1:A500 on worksheet one that contain the value 2, and changes it to 5.

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник: docs.microsoft.com

VBA Excel. Метод Find объекта Range

Метод Find объекта Range для поиска ячейки по ее данным в VBA Excel. Синтаксис и компоненты. Знаки подстановки для поисковой фразы. Простые примеры.

Предназначение и синтаксис метода Range.Find

Метод Find объекта Range предназначен для поиска ячейки и сведений о ней в заданном диапазоне по ее значению, формуле и примечанию. Чаще всего этот метод используется для поиска в таблице ячейки по слову, части слова или фразе, входящей в ее значение.

Синтаксис метода Range.Find

Expression – это переменная или выражение, возвращающее объект Range, в котором будет осуществляться поиск.

В скобках перечислены параметры метода, среди них только What является обязательным.

Метод Range.Find возвращает объект Range, представляющий из себя первую ячейку, в которой найдена поисковая фраза (параметр What). Если совпадение не найдено, возвращается значение Nothing.

Параметры метода Range.Find

Наименование Описание
Обязательный параметр
What Данные для поиска, которые могут быть представлены строкой или другим типом данных Excel. Тип данных параметра – Variant.
Необязательные параметры
After Ячейка, после которой следует начать поиск.
LookIn Уточняет область поиска. Список констант xlFindLookIn:

  • xlValues (-4163) – значения;
  • xlComments (-4144) – примечания*;
  • xlNotes (-4144) – примечания*;
  • [xlFormulas (-4123) – формулы]**.
LookAt Поиск частичного или полного совпадения. Список констант xlLookAt:

  • xlWhole (1) – полное совпадение;
  • xlPart (2) – частичное совпадение.
SearchOrder Определяет способ поиска. Список констант xlSearchOrder:

  • xlByRows (1) – поиск по строкам;
  • xlByColumns (2) – поиск по столбцам.
SearchDirection Определяет направление поиска. Список констант xlSearchDirection:

  • xlNext (1) – поиск вперед;
  • xlPrevious (2) – поиск назад.
MatchCase Определяет учет регистра:

  • False (0) – поиск без учета регистра (по умолчанию);
  • True (1) – поиск с учетом регистра.
MatchByte Условия поиска при использовании двухбайтовых кодировок:

  • False (0) – двухбайтовый символ может соответствовать однобайтовому символу;
  • True (1) – двухбайтовый символ должен соответствовать только двухбайтовому символу.
SearchFormat Формат поиска – используется вместе со свойством Application.FindFormat.

* Примечания имеют две константы с одним значением. Проверяется очень просто: MsgBox xlComments и MsgBox xlNotes .
** Тесты показали неработоспособность метода Range.Find с константой xlFormulas в моей версии VBA Excel.

В справке Microsoft тип данных всех параметров, кроме SearchDirection, указан как Variant.

Знаки подстановки для поисковой фразы

Условные знаки в шаблоне поисковой фразы:

  • ? – знак вопроса обозначает любой отдельный символ;
  • * – звездочка обозначает любое количество любых символов, в том числе ноль символов;

Простые примеры

При использовании метода Range.Find в VBA Excel необходимо учитывать следующие нюансы:

  1. Так как этот метод возвращает объект Range (в виде одной ячейки), присвоить его можно только объектной переменной, объявленной как Variant, Object или Range, при помощи оператора Set.
  2. Если поисковая фраза в заданном диапазоне найдена не будет, метод Range.Find возвратит значение Nothing. Обращение к свойствам несуществующей ячейки будет генерировать ошибки. Поэтому, перед использованием результатов поиска, необходимо проверить объектную переменную на содержание в ней значения Nothing.

В примерах используются переменные:

  • myPhrase – переменная для записи поисковой фразы;
  • myCell – переменная, которой присваивается первая найденная ячейка, содержащая поисковую фразу, или значение Nothing, если поисковая фраза не найдена.

Источник: vremya-ne-zhdet.ru

Макрос для поиска ближайшего значения заданному на всех листах книги Excel

В данном примере предоставлен код VBA-макроса с пояснениями для поиска ближайшего значения указанному на всех листах книги в Excel.

Как найти ближайшее значение заданному на листах книги макросом VBA

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

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

Для открытия редактора используйте Alt+F11. В открывшемся окне нажмите правой кнопкой мыши на «Modules», выберите пункт «Insert» и в раскрывшемся списке – пункт «Module»:

Введите код макроса в открывшемся окне для ввода кода:

Sub Module1()
Dim strFindData As String
Dim tempArr() As Integer
Dim rgFound As Range
Dim i As Integer
Dim indexTempArr As Integer
strFindData = InputBox( “Введите данные для поиска” )
‘проверка введенных данных
If IsNumeric(strFindData) = False Then
MsgBox ( “Вы ввели не число” )
Exit Sub
Else :
strFindData = strFindData * 1
End If
For i = 1 To Worksheets.Count
With Worksheets(i).UsedRange.Cells
Set rgFound = .Find(strFindData, LookIn:=xlValues, LookAt:=xlWhole)
If Not rgFound Is Nothing Then
MsgBox ( “Найдено точное совпадение – ” & rgFound & ” на ” & Worksheets(i).Name)
Exit Sub
‘поиск ячеек с числовыми значениями и запись этих значений в массив
Else :
For Each cl In Worksheets(i).UsedRange.Cells
If cl <> “” And IsNumeric(cl) Then
ReDim Preserve tempArr(indexTempArr)
tempArr(indexTempArr) = cl.Value * 1
indexTempArr = indexTempArr + 1
End If
Next
End If
End With
Next
‘сортировка массива по возрастанию
Dim k As Integer
Dim sortedArr As Variant
sortedArr = SortingArr(tempArr)
Worksheets.Add.Name = “Result”
For l = LBound(sortedArr) To UBound(sortedArr)
Worksheets( “Result” ).Range( “B” & l + 1) = sortedArr(l)
Next l
Worksheets( “Result” ).Range( “C1” ).FormulaLocal = _
“=ЕСЛИ(B1 & strFindData & “;СУММПРОИЗВ(МАКС((B1:B” & UBound(sortedArr) + 1 & _
” & strFindData & “)*(B1:B” & UBound(sortedArr) + 1 & “)));B1)”
Dim resultValue As Integer
resultValue = Worksheets( “Result” ).Range( “C1” ).Value
Sheets( “Result” ).Application.DisplayAlerts = False
Worksheets( “Result” ).Delete
MsgBox ( “Найдено приближенное значение – ” & resultValue)
‘MsgBox (“Поиск не дал результатов”)
End Sub
Function SortingArr(myTempArr, Optional First As Long = -1, Optional Last As Long = -1) As Variant
Dim i As Long , j As Long , MidEl As Variant , t As Variant
On Error Resume Next
First = IIf(First = -1, LBound(myTempArr), First)
Last = IIf(Last = -1, UBound(myTempArr), Last)
i = First
j = Last
MidEl = myTempArr((First + Last) 2)
Do While i If myTempArr(i) Then
i = i + 1
Else
If myTempArr(j) > MidEl Then
j = j – 1
Else
t = myTempArr(i)
myTempArr(i) = myTempArr(j)
myTempArr(j) = t
i = i + 1
j = j – 1
End If
End If
Loop
If First Then Call SortingArr(myTempArr, First, j)
If i Then Call SortingArr(myTempArr, i, Last)
SortingArr = myTempArr
End Function

Теперь для поиска ближайшего значения заданному на всех листах можно воспользоваться макросом, для вызова которого необходимо выбрать вкладку «Вид», нажать на кнопку «Макросы» (ALT+F8), в открывшемся окне выбрать название требуемого модуля и нажать «Выполнить»:

В окне нашего пользовательского VBA-макроса введите значение 78 для поиска на всех листах книги. И нажмите ОК:

В результате макрос нас информирует о том, что найдено значение 78 на Лист2:

Теперь введите значение 35 которого нет на листах. Но наш VBA макрос не растерялся. В место традиционного «Значения не найдено :(» он выполнил поиск и нашел нам максимально приблизительное значение к исходному (35):

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

Логика работы макроса для поиска ближайшего значения заданному на всех листах

В первую очередь организуем ввод данных через InputBox и проверку типа данных, полученных на вход (IsNumeric). Если введено не число, макрос прекратит свою работу с соответствующим сообщением.

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

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

Примечание: поскольку поиск ведется по всем листам книги, используем выражение «For i = 1 To Worksheets.Count» для перебора листов в цикле. Поскольку ячеек на листе может быть огромное множество, с помощью свойства UsedRange организовываем поиск только в используемой области ячеек.

Если точное совпадение не найдено, выполняется участок кода, который выбирает все числовые значения из ячеек всех листов и заполняет ими массив данных tempArr с последующей сортировкой с использованием функции Function QuickSort (реализована отдельно для удобства).

Для упрощения кода, данные из отсортированного массива передаются в ячейки нового листа (Worksheets.Add.Name = “Result”) с названием «Result». Затем в соседней ячейке используется формула Excel для поиска ближайшего числа в диапазоне:

Поскольку новый лист необходим только для промежуточных расчетов, полученное максимально приближенное значение передаем в переменную resultValue, а лист «Result» удаляем. Для вывода искомого значения используем метод MsgBox (“Найдено приближенное – ” & resultValue).

Полезный совет! Чтобы выполнить макросом поиск по всех листах книги Excel не только числовые значение, а и текстовые измените параметры функции .Find(), которая находится на 29-ой строке кода. Так же не забудьте отключить проверку типа данных IsNumeric(strFindData) закомментировав строки 16-18.

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

Источник: exceltable.com

VBA FIND

Excel VBA Find

When we use Find in a normal worksheet we press keyboard shortcut CTRL + F and type the data we need to find and if not desired value we go to the next match, if there is a lot of such matches it is a tedious task but when we use FIND in VBA it does the tasks for us and give us the exact match and it takes three arguments, one is what to find, where to find and where to look at.

Before we move to VBA and start using find function in macros we need to learn first what is a find function in excel. In normal excel in the Home tab under the editing group, we can find a find function which is used to find a string or a value in a cell range or whole worksheet.

When we click on this, we get two options;

One is simple to find,

We can see it has also a mode of options which opens up another feature.

It does the find algorithm with four constraints, Find What, Within, Search and look in.

The second option in excel is to Find and replace which is used when we find a string but what to replace it with any other value,

Find Function Syntax

We have learned above what is Find in basic excel. In VBA we write codes manually but the features are the same as normal excel. First, let us look at the syntax.

If the value we are looking is found with the excel function it returns the cell where the value is and if the value is not found then the object of the function is set to nothing.

Expressions in macros are ranges defined such as range 1 or range 2. What is a keyword for what we want to search a specific value? Lookin is a keyword for what we are trying to search is it a comment or a formula or a string. Similarly, there are other constraints in Find function which are optional. The only mandatory field required is what is a value we are trying to search.

Basically, VBA find Excel has one required argument which is What which value we want to search. The rest of the constraints are optional and there are many constraints in find function. Find function is similar to what a find function is in excel.

The parameter for find function is the range of cells. Like in which range we want to find a value. It can be a few columns or few cells or whole worksheet.

Examples

Example #1

Suppose our data has the following values

We will try to find “Aran” in the same data.

  • To write a VBA code it is necessary to have enabled the developer tab in order to be able to write VBA Codes.

  • We start writing our code by writing the following code as shown below,

  • The sample is the function name given to sub.
  • Find is the string we want the user we want to enter to search.
  • Rng is the variable we took for the range.
  • Now we ask the user to enter the value which looks like the screenshot below,

  • Now we will define our find function in the module.

  • The function finds the value entered by the user in the given range.
  • Now we close the function by the following arguments.

  • Now if we run our code first it asks for a prompt by the user for a value.

  • Once the code is completed it returns the cell to where the data was found.

Example #2

In the above example, there were four unique names but what if there were more than one names in the data, such as consider the below data,

We can see that the name Aran is repeated twice in the above data. If excel has to find the name Aran it will find it in cell A2 and stop, but there is another value similar to that of A2 in cell A6. How to fetch that value? Here comes the syntax of Find(What, After) in help.

After defines cell after which reference we want to search the data.

Let us write the code for the above data.

  • Always remember to enable developer tab from options and then from customizing ribbons to be able to write the code in VBA.
  • In VBA we get Microsoft excel objects which is a module where we write the codes.

  • Previously we were working on sheet 1 now we are working in sheet 2 so select sheet 2 for another module and a blank page appears.

  • Now start writing the code by defining the function first as SUB Sample2() and press enter.

  • Now we have defined our function we will start getting into the main part which is defining our variables.

  • Define what does the Find variable should have,

  • Select the sheets which we are working on which is sheet 2 in this example,

  • Now we will find the text whatever the user enters after A2 cell, so we define our find function as below,

  • Now we close the code by ending the with and if conditions.

What the above code does is search the string after the cell A2 and returns the cell wherever it is found.

Things to Remember

  1. First things first we need to enable the developer tab in order to use VBA.
  2. What is the specific value we need to find?
  3. If the value is not found, the object of the function is set to nothing.

Recommended Articles

This has been a complete guide to VBA Find Function . Here we learn how to use Excel VBA find function with practical examples and downloadable excel sheet. You may also have a look at other articles related to Excel VBA –

Источник: www.wallstreetmojo.com

Search and Find Using VBA

The Find function is one of the most common functions used in VBA. The method allows users to locate the first occurrence of a piece of information within a range. You can use this method to search in a sheet, or part of a Microsoft Excel spreadsheet. This tutorial will explain how to find a value in an Excel column using the Find function in VBA.

Search Data Using Find

The Find function works very similarly to a basic search function. If you’re looking to perform a simple search of all data in a workbook, you can do so by simply pressing the [CTRL] + F keys on your keyboard. This will open up a search box. Simply type in the keyword or value you’re searching for and hit Enter.

Excel will highlight all of the cells that correspond to your search.

Search Data Using the Find Method in VBA

Here is how the Find function would look in VBA. Note that the search term used for this example is Value:

Understanding the Find Method

Here is a quick breakdown of all of the parameters of the Find method.

MyRange: This expression represents the Range object, which designates in which cells you’d like to search for the value contained in What parameter.

This can be your full sheet (Sheets(1).Cells.Find(. )), a column (Sheets(1).Columns(3).Find(. )), a row (Sheets(1).Rows(7).Find(. )), or a range of cells (Sheets(1).Range(“D12:F56”).Find(. )).

What: This parameter is required. This parameter allows you to stipulate which value you want to find in your range. It can be of any data type supported by Excel.

After: This parameter is optional. This parameter indicates the starting cell for the search (note that the cell must be unique). If After is not specified, the search will begin in the upper left corner of the range.

LookIn: This parameter is optional. The parameter is used to locate a value in a range. Other variations of LookIn include xlValues, xlFormulas, and xlComments.

LookAt: This parameter is optional. LookAt indicates whether or not the value must be exactly equal to the value sought, or partially equal.

For example, if one were to search for the value “10” in a matrix including: 6210, 4105, 540, 163, 154, 132, 10, there are various methods you can use. To tell VBA that you only want the number 10, you can use the parameter LookAt:=XlWhole. In contrast, to indicate you are searching for values that contain 10 (in this case, 6210 or 4105), you can use LookAt:=XlPart.

SearchOrder: This parameter is optional. The search order is subject to two constants: xlByRows (for rows), or xlByColumns (for columns).

SearchDirection: This parameter is optional. This parameter indicates the direction of search in a particular range. The two constants are xlNext, which is used to search a subsequent value in the range, and xlPrevious, which is used to search a value stated previously.

MatchCase: This parameter is optional. The two values for this argument are True and False. Case-sensitive searches should be set to True.

SearchFormat: This parameter is optional. The parameter can be True or False depending on whether or not a format is assigned (e.g. monetary standard, number, border, fill, alignment, etc.).

Returned Value of Find Method

Examples of Find Method in VBA

N.B. If we had made a search for the 1024 number instead of the word “Find”, we should have been declared Valeur_Cherchee as an integer. The What variant allows you to search for any type of data.

Multiple Searches in VBA

Using the Find_Next Variant

In the example coded here we will look for the word “mot” in the A1:A20 range:

N.B. For an entire column, simply replace:

N.B. To return the addresses of the cells rather than the line number in the Find_Next function, replace:

FindAll

This custom function returns Find and FindNext results as an array of values. It will find all the instances of a string (sText As String) and returns an array containing the line numbers.

The parameters of this function are as follows:

ByVal sText As String represents the target value.

ByRef oSht As Worksheet represents the target sheet.

ByRef sRange As String represents the range.

ByRef arMatches() As String represents the array that will store the returned values.

Источник: ccm.net