Метод Find объекта Range для поиска ячейки по ее данным в VBA Excel. Синтаксис и компоненты. Знаки подстановки для поисковой фразы. Простые примеры.
Метод Find объекта Range предназначен для поиска ячейки и сведений о ней в заданном диапазоне по ее значению, формуле и примечанию. Чаще всего этот метод используется для поиска в таблице ячейки по слову, части слова или фразе, входящей в ее значение.
Синтаксис метода Range.Find
Expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat) |
Expression – это переменная или выражение, возвращающее объект Range, в котором будет осуществляться поиск.
В скобках перечислены параметры метода, среди них только What является обязательным.
Метод Range.Find возвращает объект Range, представляющий из себя первую ячейку, в которой найдена поисковая фраза (параметр What). Если совпадение не найдено, возвращается значение Nothing.
Если необходимо найти следующие ячейки, содержащие поисковую фразу, используется метод Range.FindNext.
Параметры метода Range.Find
Наименование | Описание |
---|---|
Обязательный параметр | |
What | Данные для поиска, которые могут быть представлены строкой или другим типом данных Excel. Тип данных параметра — Variant. |
Необязательные параметры | |
After | Ячейка, после которой следует начать поиск. |
LookIn | Уточняет область поиска. Список констант xlFindLookIn:
|
LookAt | Поиск частичного или полного совпадения. Список констант xlLookAt:
|
SearchOrder | Определяет способ поиска. Список констант xlSearchOrder:
|
SearchDirection | Определяет направление поиска. Список констант xlSearchDirection:
|
MatchCase | Определяет учет регистра:
|
MatchByte | Условия поиска при использовании двухбайтовых кодировок:
|
SearchFormat | Формат поиска – используется вместе со свойством Application.FindFormat. |
* Примечания имеют две константы с одним значением. Проверяется очень просто: MsgBox xlComments
и MsgBox xlNotes
.
В справке Microsoft тип данных всех параметров, кроме SearchDirection, указан как Variant.
Знаки подстановки для поисковой фразы
Условные знаки в шаблоне поисковой фразы:
- ? – знак вопроса обозначает любой отдельный символ;
- * – звездочка обозначает любое количество любых символов, в том числе ноль символов;
- ~ – тильда ставится перед ?, * и ~, чтобы они обозначали сами себя (например, чтобы тильда в шаблоне обозначала сама себя, записать ее нужно дважды: ~~).
Простые примеры
При использовании метода Range.Find в VBA Excel необходимо учитывать следующие нюансы:
- Так как этот метод возвращает объект Range (в виде одной ячейки), присвоить его можно только объектной переменной, объявленной как Variant, Object или Range, при помощи оператора Set.
- Если поисковая фраза в заданном диапазоне найдена не будет, метод Range.Find возвратит значение Nothing. Обращение к свойствам несуществующей ячейки будет генерировать ошибки. Поэтому, перед использованием результатов поиска, необходимо проверить объектную переменную на содержание в ней значения Nothing.
В примерах используются переменные:
- myPhrase – переменная для записи поисковой фразы;
- myCell – переменная, которой присваивается первая найденная ячейка, содержащая поисковую фразу, или значение Nothing, если поисковая фраза не найдена.
Пример 1
Sub primer1() Dim myPhrase As Variant, myCell As Range myPhrase = “стакан” Set myCell = Range(“A1:L30”).Find(myPhrase) If Not myCell Is Nothing Then MsgBox “Значение найденной ячейки: “ & myCell MsgBox “Строка найденной ячейки: “ & myCell.Row MsgBox “Столбец найденной ячейки: “ & myCell.Column MsgBox “Адрес найденной ячейки: “ & myCell.Address Else MsgBox “Искомая фраза не найдена” End If End Sub |
В этом примере мы присваиваем переменной myPhrase значение для поиска – "стакан"
. Затем проводим поиск этой фразы в диапазоне "A1:L30"
с присвоением результата поиска переменной myCell. Далее проверяем переменную myCell, не содержит ли она значение Nothing, и выводим соответствующие сообщения.
Ознакомьтесь с работой кода VBA в случаях, когда в диапазоне "A1:L30"
есть ячейка со строкой, содержащей подстроку "стакан"
, и когда такой ячейки нет.
Пример 2
Теперь посмотрим, как метод Range.Find отреагирует на поиск числа. В качестве диапазона поиска будем использовать первую строку активного листа Excel.
Sub primer2() Dim myPhrase As Variant, myCell As Range myPhrase = 526.15 Set myCell = Rows(1).Find(myPhrase) If Not myCell Is Nothing Then MsgBox “Значение найденной ячейки: “ & myCell Else: MsgBox “Искомая фраза не найдена” End If End Sub |
Несмотря на то, что мы присвоили переменной числовое значение, метод Range.Find найдет ячейку со значением и 526,15
, и 129526,15
, и 526,15254
. То есть, как и в предыдущем примере, поиск идет по подстроке.
Чтобы найти ячейку с точным соответствием значения поисковой фразе, используйте константу xlWhole параметра LookAt:
Set myCell = Rows(1).Find(myPhrase, , , xlWhole) |
Аналогично используются и другие необязательные параметры. Количество «лишних» запятых перед необязательным параметром должно соответствовать количеству пропущенных компонентов, предусмотренных синтаксисом метода Range.Find, кроме случаев указания необязательного параметра по имени, например: LookIn:=xlValues
. Тогда используется одна запятая, независимо от того, сколько компонентов пропущено.
Пример 3
Допустим, у нас есть многострочная база данных в Excel. В первой колонке находятся даты. Нам необходимо создать отчет за какой-то период. Найти номер начальной строки для обработки можно с помощью следующего кода:
Sub primer3() Dim myPhrase As Variant, myCell As Range myPhrase = “01.02.2019” myPhrase = CDate(myPhrase) Set myCell = Range(“A:A”).Find(myPhrase) If Not myCell Is Nothing Then MsgBox “Номер начальной строки: “ & myCell.Row Else: MsgBox “Даты “ & myPhrase & ” в таблице нет” End If End Sub |
Несмотря на то, что в ячейке дата отображается в виде текста, ее значение хранится в ячейке в виде числа. Поэтому текстовый формат необходимо перед поиском преобразовать в формат даты.
Tanya15 Пользователь Сообщений: 5 |
Здравствуйте, подскажите, пожалуйста, как правильно прописать код VBA. |
V Пользователь Сообщений: 5040 |
и что дальше с этим делать будете? |
Пытливый Пользователь Сообщений: 4652 |
Варианты: Воспользоваться методом Find для диапазона. Вопрос – что дальше с ними делать надо? upd V, опередил с вопросом! Кому решение нужно – тот пример и рисует. |
Nordheim Пользователь Сообщений: 3154 |
#4 02.02.2018 11:12:01
Изменено: Nordheim – 02.02.2018 11:13:37 “Все гениальное просто, а все простое гениально!!!” |
||
Tanya15 Пользователь Сообщений: 5 |
Мой пример Sub Кнопка2_Щелчок() If Cells(i, j) = “яблоко” Then End Sub
В итоге считает только “яблоко”, а зеленые и красные не учитывает. Необходимо, чтобы считал по всем ячейкам в которых содержится слово “яблоко” Изменено: Tanya15 – 02.02.2018 12:10:19 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Казанский Пользователь Сообщений: 8839 |
#6 02.02.2018 12:13:03 Tanya15,
|
||
Tanya15 Пользователь Сообщений: 5 |
Все так просто Спасибо! |
Nordheim Пользователь Сообщений: 3154 |
#8 02.02.2018 12:17:43 под ваш пример.
Изменено: Nordheim – 02.02.2018 12:20:58 “Все гениальное просто, а все простое гениально!!!” |
||
You will find everything you need to know on the Excel VBA Find function. The Range Find function allows you to find cells within your Excel worksheet (and workbook) that contain a certain text or value. In this post let us explore the many ways in which you can use the Find function.
Looking to search text within VBA strings instead? See the VBA InStr and VBA InStrRev functions
Before we show how to use VBA to search for text within an Excel spreadsheet let us first see how to do it Excel and explore the usually unknown features of the famous CTRL+F combo. See below where you can find it within the Home ribbon and Editing group.
By clicking the above or simply using the key combo CTRL+F we can enter the Find & Replace modal window.
As you notice above Excel easily finds 10 matches for the cells on the left. However there are several more interesting search combinations you can use, including usage of wildcards you can use to get more specific patterns. See some examples below:
Find | Matches |
---|---|
some*text |
|
some ? |
|
some*e*a |
|
As you might have already noticed I used 2 types of wildcards above:
- * – the asterisk symbol represents zero or many of any type of characters. It can be injected between characters to replace either no or any number of characters.
- ? – the question mark represents at least 1 character.
Now that we have a hand of the basic features of Excel in terms of word search let us move to how to use Excel VBA to find cells containing specific text.
VBA Range Find function
The VBA Find function is in fact a function of the Excel VBA Range object class. See Microsoft documentation for more details. A VBA Range represents any subset of cells within a spreadsheet – it can be a single cell, entire row or a patchwork of different cells and other Ranges. Executing the Find function in fact limits the search to only the cells within its Range object.
Below is the definition of the VBA Range Find function and its parameters:
.Find(What, [After] [LookIn], [LookAt], [SearchOrder], [SearchDirection], [MatchCase], [MatchByte], [SearchFormat])
The Find function returns only the first match within the Range. To search for next items you need to follow it up with the FindNext function.
Parameter | Required | Description |
---|---|---|
What | Required | The value you are searching for |
After | Optional | The cell range from which you start your search from |
LookIn | Optional | What to search in e.g. Formulas, Values or Comments – constants of XlFindLookIn: xlValues, xlFormulas, xlComments, xlCommentsThreaded |
LookAt | Optional | Whether to search in a part of the string in a cell or whether it needs to match the entire cell string – constants of XlLookAt: xlWhole, xlPart |
SearchOrder | Optional | The sequence of the search i.e. whether to search by rows or columns – constants of XlSearchOrder: xlByRows or xlByColumns |
SearchDirection | Optional | Whether to search forward (next) or backwards (previous) – constants of XlSearchDirection: xlNext, xlPrevious |
MatchCase | Optional | Case sensitive or not – True or False |
MatchByte | Optional | Used for double byte languages. True to have double-byte characters match only double-byte characters – True or False |
SearchFormat | Optional | Allow searching by format. See Application.FindFormat – True or False |
VBA Find – simple example
We will start with a very simple VBA Range Find function example – searching for a single cell within the entire Excel active spreadsheet:
Dim ws As Worksheet Set ws = ActiveSheet Debug.Print ws.Cells.Find("some")
Output:
some text
As you can see it found the first match within the Activesheet (currently open and top spreadsheet) and returned the found value.
VBA Find All
Finding all matches is a little more complicated in VBA than in Excel. We will need to use Do While loop to run via all matches:
Dim searchRange As Range, found As Range, firstFind As Range 'Set the search range to the entire worksheet Set searchRange = ActiveSheet.Cells 'Search for the first match Set found = searchRange.Find("some") 'Save the first found cell to check later whether we have completed the search Set firstFind = found 'Loop through all items using FindNext Range function Do If Not (found Is Nothing) Then Debug.Print found.Value Set found = searchRange.FindNext(found) End If Loop While Not (found = firstFind)
Output:
some text some other text someone something somedeal someones somerset someway somewhat somewhen
I highlighted above 2 key functions that were used the Range Find Function and the Range FindNext Function. As I mentioned above the Find function will only return the first match. To get next matches you need to run FindNext on the original range. This is I am executing FindNext on the searchRange variable and not the found variable.
Another interesting point to notice is the Do While…loop. Notice I am comparing the found variable to the firstFind variable. This is because when running FindNext it will at some point move to the first match once again and thus never end… it will just keep going in a cirle! Thus the loop is set to end once the FindNext function returns the same first cell.
Find using Wildcards
As mentioned above you can use 2 types of wildcards the asterisk * (zero or more characters) and the question mark ? (at least 1 character) to match slightly more complicates cases.
Dim ws As Worksheet Set ws = ActiveSheet Debug.Print ws.Cells.Find("some ?") 'Output: some text Debug.Print ws.Cells.Find("some*w") 'Output: someway
VBA Find with After
To remind the After parameter of the Excel VBA Range Find function defines where you will start your search. It is useful when you don’t want to redefine your range just for the purpose of the search activity. See the example below:
Debug.Print Range("B2:B5").Find("some ?", After:=Range("B3"))
Output:
someone
As you can see below the Find function starts searching for the “some” string just after cell B3 i.e. it will start at B4 where it finds the first matching string.
Find After – avoid wrap around
Even if we specify that the VBA Range Find function should start searching for the string after a specified cell, it might wrap around back to the beginning of the Range we specified if it does not find a match when going down. See example below to understand:
Debug.Print Range("B2:B5").Find("some*text", After:=Range("B3"))
Output:
some text
As you see the search started at B4 however once the search pattern “some*text” was not found until B5 the function resumed search on the remaining cells B2:B3 to find “some text”.
Find After Avoid wrapping using VBA Find
What to do to avoid this wrapping? We can check whether the found text is not within the preceding range using the Application.Intersect function.
If the found cell is before our After cell then we can handle it as such:
Set found = Range("B2:B5").Find("some*text", After:=Range("B3")) If Intersect(Range("B2:B3"), found) Is Nothing Then Debug.Print "Found text: " & found.Value Else Debug.Print "Text found is within excluded range" End If
Output:
Text found is within excluded range
However if the found cell is only After the cell we specified then it will show like this:
Set found = Range("B2:B5").Find("some", After:=Range("B3")) If Intersect(Range("B2:B3"), found) Is Nothing Then Debug.Print "Found text: " & found.Value Else Debug.Print "Text found is within excluded range" End If
Output:
Found text: someone
Find in Values, Formulas, Comments
The VBA Range Find function allows you not only to search within Values (the evalution of your Excel formulas). It can also search instead (or including) within Formulas, Comments and even Excel Threaded Comments.
Let us explore how to use the LookIn parameter to look into specific attributes of a cell.
In the code below we will search for the word dog within Values, Formulas, Notes and Threaded Comments (just the first one). We will return the address first. Notice that for Formulas the result was the same – this is because the Value and Formula is the same in this case.
Debug.Print Range("A1:D4").Find("dog", LookIn:=xlValues).AddressLocal 'Output: $A$2 Debug.Print Range("A1:D4").Find("dog", LookIn:=xlFormulas).AddressLocal 'Output: $A$2 - as the formula and value for "dog" are the same in this case Debug.Print Range("A1:D4").Find("This is a dog", LookIn:=xlFormulas).AddressLocal 'Output: $B$2 Debug.Print Range("A1:D4").Find("dog", LookIn:=xlNotes).AddressLocal 'Output: $C$2 Debug.Print Range("A1:D4").Find("dog", LookIn:=xlCommentsThreaded).AddressLocal 'Output: $D$2
The same code but this time returning the actual Value, Formula, Note or Comment:
Debug.Print Range("A1:D4").Find("dog", LookIn:=xlValues).Value 'Output: dog Debug.Print Range("A1:D4").Find("dog", LookIn:=xlFormulas).Formula2Local 'Output: dog Debug.Print Range("A1:D4").Find("This is a dog", LookIn:=xlFormulas).Formula2Local 'Output: =IF(A2="Dog", "This is a Dog","Other") Debug.Print Range("A1:D4").Find("dog", LookIn:=xlNotes).NoteText 'Output: This is a note about a dog Debug.Print Range("A1:D4").Find("dog", LookIn:=xlCommentsThreaded).CommentThreaded.Text 'Output: This is a threaded comment about a dog
Find After – avoid wrap around
Complex patterns for Find
In some cases the pattern you want to find might be more complicated such as e.g. looking for cells with any sequence of numbers, emails, addresses, phone numbers etc. In this case the VBA Range Find function will be too limited. However, there is a solution with the help of so call VBA Regular Expressions. Regular Expressions help define almost any search pattern and are widely used in other programming languages.
If you want to learn more read my VBA Regex Tutorial otherwise a very simple example below.
In below code snippet we would like to find only phone numbers – so we will create a simple expression that finds any sequence of digits.
'Define the Regular Expression Dim regex As Object Set regex = CreateObject("VBScript.RegExp") With regex 'We will look only for sequences of at least 1 digit .Pattern = "[0-9]+" End With 'Search in all cells within the Range Dim r As Range For Each r In Range("A1:D4") If regex.Test(r.Value) Then Debug.Print "Found a match: " & r.AddressLocal End If Next r
Found a match: $A$3
Excel – VBA
I was wondering how to find a word into a Excel range of rows using VBA. Ex. “word to be found”, this is not just the cell value but a word into a string. For instance, the way to find the word “network” into the string “Need help to map network printer”.
Sub SearchForSfb()
Dim LSearchRow As Integer
Dim LCopyToRow As Integer
On Error GoTo Err_Execute
'Start search in row 1
LSearchRow = 1
'Start copying data to row 2 in Open (row counter variable)
LCopyToRow = 2
While Len(Range("E" & CStr(LSearchRow)).Value) > 0
'If value in column E = "word to be found", copy entire row to Open
If Range("E" & CStr(LSearchRow)).Value = "word to be found" Then
'Select row in Data to copy
Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
Selection.Copy
'Paste row into SFB in next row
Sheets("SFB").Select
Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
Sheets("SFB").Paste
'Move counter to next row
LCopyToRow = LCopyToRow + 1
'Go back to Data to continue searching
Sheets("Data").Select
End If
LSearchRow = LSearchRow + 1
Wend
'Position on cell A3
Application.CutCopyMode = False
Range("A3").Select
MsgBox "All matching data has been copied."
Exit Sub
Err_Execute:
MsgBox "An error occurred."
End Sub
pnuts
58.1k11 gold badges86 silver badges138 bronze badges
asked Oct 4, 2015 at 8:44
1
Use a simple loop
Sub Button1_Click()
Dim ws As Worksheet
Dim sh As Worksheet
Dim lstRw As Long
Dim rng As Range
Dim s As String
Dim c As Range
s = "* network *"
Set ws = Sheets("Data")
Set sh = Sheets("SFB")
With ws
lstRw = .Cells(.Rows.Count, "E").End(xlUp).Row
Set rng = .Range("E2:E" & lstRw)
End With
For Each c In rng.Cells
If c.Value Like s Then
c.EntireRow.Copy sh.Cells(sh.Rows.Count, "A").End(xlUp).Offset(1)
End If
Next c
End Sub
Or you can use a filter macro
Sub FiltExample()
Dim ws As Worksheet, sh As Worksheet
Dim rws As Long, rng As Range
Set ws = Sheets("Data")
Set sh = Sheets("SFB")
Application.ScreenUpdating = 0
With ws
rws = .Cells(.Rows.Count, "E").End(xlUp).Row
.Range("E:E").AutoFilter Field:=1, Criteria1:="=*network*"
Set rng = .Range("A2:Z" & rws).SpecialCells(xlCellTypeVisible)
rng.EntireRow.Copy sh.Cells(sh.Rows.Count, "A").End(xlUp).Offset(1)
.AutoFilterMode = False
End With
End Sub
answered Oct 4, 2015 at 9:18
DavesexcelDavesexcel
6,7532 gold badges27 silver badges42 bronze badges
1
Поиск ячеек, содержащих определенное слова (VBA)
Смотрите также открытого файла.200?’200px’:”+(this.scrollHeight+5)+’px’);”>=ЕСЛИ(ЕНД(ПОИСКПОЗ(1;–ЕЧИСЛО(ПОИСК({“Дефектоскопист”:”Электрогазосварщик”:”Электросварщик”};B2));0));””;”+ретик”) = 7 To
Split(Mid(adr, 2, 1000)) занят.Alex77755в этом прайсе справки) For EachDim iWord As 400, что там я видимо слишком сделать – 20х20alucard91 ячейки – 10;
в макросе. Я SingleTanya15Вот код, но
AlexM i1 For iVlad999yl3d
: Можно как-нибудь так. беру цену D8 c In [A1:C5] Variant, iSource As в строке - много хочу от
в словарь с: VBA для Excel.
“AN185” – 5. пыталась сделать черезs = 0: Здравствуйте, подскажите, пожалуйста, думаю вам он: = 1 To: 1. уберите скобки: Vlad999 , ясноРазвивать дальше фильтрывставляю в базу ‘ If c.Font.Name Range, iCell As непонятно (может там экселя)) столбцом, split ячейки,Массив ключевых слов ИНАЧЕ во всех Formula.R1C1 и IndexFor i = как правильно прописать ничем не поможет,китин 4 .Pattern = у msVlad999 и условия H43 Like “Cour*” Then
Range iWord = слов в пару
Но начальная проблема
перебор этого массива, и специфика текста других случаях - Match, но насколько
2 To 6
код VBA. т.к. вставляет полностью
, зачем ПОИСКПОЗ() “s?передачаs” If .test(Range(“A”
Dim ms2. замените:
yl3d________________ ‘ c.Font.Name =
Replace([A1], ” “,
раз больше).
решена, вопрос закрыт, проверка по словарю,
в ячейке исключает
6.67.
я поняла RC
For j =Необходимо в диапазоне весь файл.
200?’200px’:”+(this.scrollHeight+5)+’px’);”>=ЕСЛИ(ИЛИ(ЕЧИСЛО(ПОИСК({“Дефектоскопист”:”Электрогазосварщик”:”Электросварщик”};B2)));”+ретик”;””) & j).Offset(, i).Value) часть кода, этоyl3d: Добрый вечер, специалистыно из производителей “Times New Roman” “-“, , 1)
Да и вообще всем спасибо! выполнение макроса, выход. одновременное упоминание двух
Я сделал эту не может искать 1 To 6
текстовых ячеек найтиSub find Set
китин Then Range(“K” & еще одна проверка, результат записывать в по экселю. штук 20 If c Like ‘: iWord = где это всё…Hugo121Т.к. так и ключей. формулу, но она
planetaexcel.ru
поиск части текста макрос VBA
часть текста изIf Cells(i, j) ячейки которые содержат
imprng =activecell Open: j) = “Есть” если искомое не одну ячейку илиПомогите разобраться сартикулов десятки тысяч, “*” & pomenat Replace(iWord, “.”, “”) может там вообще: Да что там не сказали чтоТак что возможно работает некорректно… ячейки. Есть ли = “яблоко” Then слово, например “яблоко”. “файл” for inputAlexM Exit For Else найдено. один адрес -
проблемой.описания каждый придумывает
& “*” Then Set iSource =
нигде ни одного сложного – добавить
за таблица и лишь одно совпадениеЕСЛИ(ЕОШИБКА(ПОИСК(“AN85A “;B38;1));10;ЕСЛИ(ЕОШИБКА(ПОИСК(“AN185A”;B38;1));5;6.67)) какие-нибудь другие вариантыs = s Т.е. есть ячейки as #1 Do, Range(“K” & j)If adr <> одна ячейка?В книге несколько в своем формате c.Font.Name = “Times [AG2:BE14] For Each привычного пробела нет пробелы по концам, ячейка – только -> один макрос.Sh_Alex решения этого вопроса? + Cells(i, j с текстом “зеленое until eof(1) Lineпросто ПОИСК не = “Нет” End
“” Then msпроверяйте листов. в какой колонке New Roman” End iWord In Split(iWord, Хотя раз код чтоб находить слова алгоритм.Спасибо.: Вот так будетМожет кто-то уже + 1) яблоко”, “красное яблоко”,
input #1, text работал, а до
planetaexcel.ru
Поиск куска текста в ячейке
If Next i, = Split(Mid(adr, 2,Sub vvv() DimНа листах 1,2,3,4 какую инфу писать If Nextили “-“) Set iCell отработал – значит целиком…alucard91pashulka правильно: =ЕСЛИ(ЕОШИБКА(ПОИСК(“AN85A”;A1));ЕСЛИ(ЕОШИБКА(ПОИСК(“AN185A”;A1));6.67;5);10) сталкивался?
End If “яблоко” и тд, Sheets(“Лист1”).Select Range(“A5”).Select activeCell
ИЛИ мозгов не
j End With 1000)) Cells(i, 5).Resize(, Ws As Worksheet,
в некоторых ячейках
Не могу найтиInStr = iSource.Find(Trim(iWord), , были.Вообще если бы: Спасибо, вечером опробую.: Один из возможных
С уважением, Александр.
Заранее спасибо заNext j необходимо, что бы = text Loop
planetaexcel.ru
Поиск значения в ячейке
хватило End Sub
UBound(ms) + 1) i%, FR As
находится текст. формулу которая найдет
заюзать – самое xlValues, xlWhole) IfГде должен быть был сразу показанЕсли не получится вариантов :Sh_Alex помощь!Cells(i, 7) = он нашел всех Close #1 EndAlexM
Пытливый
= ms End Range, adr$, f$,
На листе “Поиск”
выбранное слово или
доступное средство…
Not iCell Is
код – это материал для работы – выложу файл-образец.Private Sub Test()
: А с учетомKuzmich
s их. sub
: Для уменьшения количества: Здравствуйте. If a$, ms() For – находится столбец выражение в общейvoidex
Nothing Then ”’ выяснили
– всем былоpashulka, большое спасибо, Dim iWord As того, что функция: Использовать Find
s = 0VAleks777
букв в формуле
Мне необходимо собратьyl3d i = 5
C5:C17 – в ячейке и вернет: спасибо! instr то Exit For Endalucard91 бы легче. очень компактный код, Variant, iCell As ПОИСК(“AN85A”;A1) при отрицательномKuzmichNext i: и что дальше: можно поэкспериментировать с формулу, которая:: Vlad999 , спасибо To Cells(Rows.Count, 3).End(xlUp).Row котором вписаны слова,
номер этой ячейки, что нужно If Next: Спасибо за оживленныйpashulka все работает прекрасно Range For Each результате выдает #ЗНАЧ!,: Макрос, запускать приEnd Sub с этим делатьf1eshka массивом, например так- берет Ф.И.О большое. f = Cells(i, по которым яhttp://office.microsoft.com/ru-ru/ex…_matches_speciartsmartHugo121
дискус):Вот только как iWord In Split([A1]) то можно покороче:
активном листе Tabelle1,итогояблоко1арбуз25яблоко2526апельсин2апельсин26арбуз140зеленое яблоко 3яблоко24вишня8624яблоко будете?,200?’200px’:”+(this.scrollHeight+5)+’px’);”>{“ефект”:”рогаз”:”росва”}
человека (столбец 1),Все работает. 3).Value For Each
хочу осуществить поиск.A: Добрый день,: Добавил небольшой код,Приведу документ вalucard91 добавить поиск по
Set iCell = =ЕСЛИ(ЕОШ(ПОИСК(“AN85A”;A1));ЕСЛИ(ЕОШ(ПОИСК(“AN185A”;A1));6.67;5);10) значения подтягиваются в арбуз 4апельсин28зеленое яблоко920красноекак вариант таблицу
Sub test() ‘Пытливый
- находит егоadrinalinka
Ws In SheetsКак макросом -Данные
уже сломал голову подправил чуть существующее удобоваримый вид и, Если не подлежит
ключу из двух [A5:T24].Find(iWord, , xlValues,С уважением, Александр. столбец В. В
яблоко5красное яблоко33апельсин320 загнать в массив strFilePath = “MyTestFile.txt”:
должность (столбец 2),: Добрый день! If Ws.Name <> провести поиск ключевыхБелов в попытке решить (минимально – выход
выложу завтра сюда редактированию, то как слов? xlWhole) If Notazat ячейке с PotatoВ итоге считает и циклом перебирать Call ImportFromTxt(“D:1.txt”, “*строка*”)AlexM- и еслиНужна Ваша помощь. “Поиск” Then Set слов по листамБД123 проблему если не нашёлся
с полным описанием узнать что сколькоНу тоесть Дядя iCell Is Nothing: Отлично. Все заработало.
уберите пробел в только “яблоко”, а . End Sub Sub, в его должности
Видела похожие темы, FR = Ws.Cells.Find(f) 1,2,3,4 и вывестиФормула Описание (результат)
есть 4 прайса ключ, и выбор задачи.
слов должен содержать он ищет, а Then Run Choose(iCell.Column, Только вместо A1 конце Sub iType() зеленые и красные
Пытливый ImportFromTxt(ByVal strFilePath Asкитин находит определенные слова но все равно
If Not FR найденный текст -=ЕСЛИ(ЕЧИСЛО(ПОИСК(“л”;A2));”Верно”; “Неверно”) Проверка поставщиков, у них не А1, аИзвините за конфуз) ключ ? вот Дядя Вася
“Change”, “Delta”, “Sum”, надо B38) Dim i As
не учитывает. Необходимо,: Варианты: Воспользоваться методом String, ByVal strLike, (в 1 ячейке не получилось сделать.
Is Nothing Then в третью строку ячейки A2 на меняются цены и первой ячейки найденного
Hugo121Может Вы хотите – уже нет. и т.д.) Exitalucard91 Long Dim iLastRow чтобы считал по Find для диапазона. As String) ConstМужики спасибо! – 1 слово)Дана таблица. По adr = adr листа “Поиск” -
наличие буквы «л» наличие (нужно обновить) диапазона, и убрал: Не нужен обязательно перебрать все варианты
Hugo121 For End If
: Добрый день! As Long Dim всем ячейкам в Вопрос – что ForReading As ByteВы не совсем выдает в ячейку столбцам перечислены стадии & ” “ с выводом адреса (Верно)
Название все пишут удаление диапазона, ибо оригинал (личные и ?: Мой алгоритм в Next End SubИлиИмеется некая ячейка, FoundCell As Range
которых содержится слово дальше с ними = 1 Dim
меня поняли: “+ ретик”, если переработки (всего 4
& Ws.Name & ячейки, в которой=ЕЧИСЛО(ПОИСК(“БД”;A3)) Проверка ячейки по разному но это мне мешало
секретные данные убирайте),
Или же Вам первом варианте избавлен так, если в содержащая текст. iLastRow = Cells(Rows.Count, “яблоко” делать надо? i As Longмне нужна была слова не встречаются стадии – 4
“!” & FR.Address был найден этот A3 на наличие содержатся точно либо Заменил на очистку
нужен полный аналог достаточно частичного совпадения от этой проблемы. таблице ключевых словИмеется таблица 20*20, “C”).End(xlUp).Row Range(“B2:B” &Казанский
upd V, опередил Dim fso As формула, которая: – оставляет ячейку столбца). В какой-то ‘—цикл по следующим
текст ? текста «БД» (ИСТИНА)
правильный номер номер – смотрите там – форматы, расположение … тогда заменитеpashulka первый столбец, не содержащая ключевые слова. iLastRow).ClearContents With Worksheets(“Tabelle2”): Tanya15, If Cells(i, с вопросом!
Object, tso As- берет Ф.И.О пустой. из стадий может найденным ячейкам aVlad999вроде работает и (в разных форматах, есть остатки!) данных, ну и xlWhole на xlPart: [A:A] :Как при помощи For i = j) like “*яблоко*”Nordheim Object Dim strLine
человека (столбец 1),200?’200px’:”+(this.scrollHeight+5)+’px’);”> встречаться “передача”, которая = FR.Address ‘—запоминаем: на листе один показывает ВЕРНО/НЕВЕРНО с пробелом,точкой илиЭто для начала, в данном случае или добавьте символalucard91Private Sub Test2() макроса запустить проверку 2 To iLastRow
Then: Sub test() Dim As String Dim- находит его
=ЕСЛИ(ИЛИ(ВПР(A2;A:B;2;0)=”Дефектоскопист”;ВПР(A2;A:B;2;0)=”Электрогазосварщик”;ВПР(A2;A:B;2;0)=”Электросварщик”);”+ретик”;””) может звучать по-разному адрес первой найденной
CyberForum.ru
Поиск в ячейках по части слова
текст всегда вно как понять тире и тп.)
там ведь нужно свои макросы не подстановки “*”
, В этом случае Dim iWord As ячейки, чтобы при Set FoundCell =Tanya15 i&, iCnt1&, iCnt2&, x As Long: должность (столбец 2)Нет формулы поиска (например, передача с ячейки Do Set одном экземпляре? в какой ячейке или правильное указание поиск ключей переделывать, лишним будет показать,Hugo121
– можно выбрать Variant, iSource As нахождении в ней
.Columns(2).Find(Cells(i, “A”), ,: Все так просто arr() ‘1 вариант x = 1 и уже ПОТОМ… слова в массиве. передачей обязательств или FR = Ws.Cells.FindNext(FR)yl3d он нашел соответствие?? модели в тексте а некогда… если возможно.: – так все другой критерий разделения Range, iCell As
любого слова из xlValues, xlPart) IfСпасибо!
CyberForum.ru
Поиск определенной части текста в ячейке
поиск на листе Set fso =
Но с Вашейкитин передача в стороннюю
If FR.Address =: Vlad999 , нетAlex77755 (с пробелом или
Hugo121alucard91 ключи говорят что ключей, например, запятую Range Set iSource столбца 1 - Not FoundCell IsNordheim For i = CreateObject(“Scripting.FileSystemObject”) ‘ Set помощью у меня: может так?только нужные
организацию). Надо, чтобы a Then Exit – может быть
: Я бы формулами без, или в: Переделал поиск -
: Секретных данных нет, известны – есть
Код A1 = = [C5:V24] For
выполнить макрос 1, Nothing Then Cells(i,
: под ваш пример. 1 To 100 tso = fso.OpenTextFile(strFilePath,
получилось!!!
слова надо вынести в пятом столбце Do adr =
несколько ячеек с не стал такое скобках)
проверяйте.
условия и задачи
где-то некая таблица. Дядя Вася, мама,
Each iWord In
из столбца 2 “B”) = .Cells(FoundCell.Row,
Sub test() Dim If UCase(Cells(i, 1).Value)
ForReading) i =
ЕСЛИ(ИЛИ(ЕЧИСЛО(ПОИСК({“Дефектоскопист”:”Электрогазосварщик”:”Электросварщик”};ВПР(A2;Лист1!A:B;2;0))));”+ретик”;””) в отдельный столбец
выполнялось следующее условие
adr & “ похожим текстом делать.Нужно найти соответствие
voidex постарался максимально расписатьpashulka мыла, раму ‘можно Split([A1]) Set iCell – выполнить макрос
“D”) End If
i&, iCnt1&, iCnt2&,
Like UCase(“яблоко”) Then
1 Do While
Второй лист.
200?’200px’:”+(this.scrollHeight+5)+’px’);”>=ЕСЛИ(ЕНД(ПОИСКПОЗ(1;–ЕЧИСЛО(ПОИСК($E$6:$E$8;B2));0));””;”+ретик”)
=если в каком ” & Ws.NameVlad999Макросами проще. Загонять
прайсов и базы: Всем доброго времени в самом документе.
: без пробелов Private
= iSource.Find(iWord, , 2, и так Next End With
arr(), ikey ‘1 iCnt1 = iCnt1 Not tso.AtEndOfStream ‘СПАСИБО!!!
формула массива из столбцов есть & “!” &
: для одного. в массивы и по модели/номеру суток
От использования разныхHugo121 Sub Test1v2() Dim xlValues, xlWhole) If для каждого столбца
End Sub вариант For Each + 1 Next
strLine = tso.ReadLine
f1eshkaтолько не понял
слово “передача”, то FR.Address Loop ‘———–
Sub vvv() Dim работать с ними.
если есть совпадениеесть макрос(точнее его макросов в зависимости, Имелось ввиду, что
iWord As Variant, Not iCell Is
ключевых слов.Nordheim
CyberForum.ru
Поиск текста с выводом адреса ячейки
ikey In ActiveSheet.UsedRange i ‘2 вариант If strLine Like
: Доброго времени суток. причем тут ФИО?
появляется слово “есть”. End If End
Ws As Worksheet,Но по тем указать Цену из
часть которую я от результата совпадения если изначально - iCell As Range Nothing Then RunПример:
: Sub test() Dim If UCase(ikey.Value) Like поиск в массиве strLike Then Cells(x, Допустим есть файлYouGreedЗадача, вроде простая, If Next ‘Cells(i, i%, FR As данным, что приложены Прайса в Базу
бы хотел изменить в таблице ушел было достаточно искать For Each iWord
Choose(iCell.Column – iSource.ColumnЯчейка = “мама i&, cell As UCase(“*яблоко*”) Then iCnt1 arr = Range([a1],
1).Value = strLine info.txt ( состоит
: Пытливый, Так? но не могу 5) = adr Range, adr$, f$ даже не могуесли изменилось указатьpomenat = InputBox(“введите к одному макросу,любое слово In Split([A1], “,”) + 1, “Change”, мыла раму” Range With Sheets(“Tabelle1″) = ikey(1, 2) [a100]).Value For i x = x из множества строк,200?’200px’:”+(this.scrollHeight+5)+’px’);”>=ЕСЛИ(СУММ(($E$5:$E$7=ПСТР(ВПР($A2;$A$2:$B$4;2;);1;НАЙТИ(” “;ВПР($A2;$A$2:$B$4;2;);1)-1))*СТРОКА($A2));”+ ретик”;”-“) сообразить, как с ‘если в одну For i = подсказать конкретно. наличие 1/0 слово”) For Z зависящему от этого
из перечисленных, т.е. Set iCell =
“Delta”, “Sum”, иТаблица ключевых слов: For i = + iCnt1 Next = 1 To + 1 End например gsd =
Откровенно, накидал туда,
помощью формул ее ‘если один адрес 5 To Cells(Rows.Count,Для более конкретногопример привел в = Z To результата. есть строка “дядю [A5:T24].Find(Trim(iWord), , xlValues, т.д.) Exit For….1…….|……2……|…….3…. 2 To .Cells(.Rows.Count, ikey MsgBox “На 100 If UCase(arr(i, If i = 797 …. dig всякого всякого, можно решить. Буду благодарна – одна ячейка 3).End(xlUp).Row f = ответа нужны конкретные приложении. LastRow1 If UCase(Cells(Z,PS: кнопку убрал вася мама мыла xlWhole) If Not End If NextМама…|..Дядя…|..Дедка 1).End(xlUp).Row Set cell листе ” & 1)) Like UCase(“яблоко”) i + 1 = 7666 и попроще… за помощь! ms = Split(Mid(adr, Cells(i, 3).Value For файлы что естьБуду благодарен за c).Text) = UCase(pomenat) в сторону и раму” и мы iCell Is Nothing End SubP.S. ПриПапа….|…Тетя…|…Бабка
= Sheets(“Tabelle2”).Columns(“b:b”).Find(Trim(.Cells(i, 1).Value), iCnt1 & “ Then iCnt2 =
Loop tso.Close Set т.д.) в корне
ПытливыйSvsh2015 2, 1000)) Cells(i,
Each Ws In и что хотелось помощь!
And…..Как сделать так, забыл вернуть, она ищем, сначала дядю,
Then ‘Выполнение необходимого желании, можно использоватьВыполнить макрос #1 lookat:=xlPart) If Not ябл.” End Sub
iCnt2 + 1 tso = Nothing в с экселевким(готова: китин,: добрый день, 5).Resize(, UBound(ms) + Sheets If Ws.Name
бы получитьAlex77755 чтобы можно было
на той же
CyberForum.ru
Поиск фрагментов текста в ячейке с использованием макросов
потом васю и макроса Exit For
массив так как ячейка cell Is NothingLina1515
Next i ‘итог Set fso = таблица) нужно сделатьПринцип работы оченьдля тестирования кнопка 1) = ms <> “Поиск” Thenartsmart: Открой секрет как ввести(в inputbox) не вкладке что и т.д. End If NextHugo121 содержит слово из Then .Cells(i, 2).Value: Всем доброго времени MsgBox “На листе
Nothing End Sub так, чтобы через нравится. Но можно test в файл-примере, ‘————————- adr = Set FR =
: Вот сделал два ты получил 9792,02?
полное содержание ячейки, описание, только сбоку.То теперь, когда
End Sub
: Добавляем к значению первого столбца. = cell(1, 3) суток!
” & iCnt1Hugo121 vba ексель находил без выноса? как-то кнопка clean -очистить: “” Next End Ws.Cells.Find(f) If Not файла вырезкаОт сюда? которое надо обработатьБольшое спасибо за выяснилось, что искомоеalucard91 ячейки по пробелуНадеюсь не сильно Next i EndЯ недавно начала & ” ябл.”: Обычно нужно вставлять в этом файле
CyberForum.ru
Поиск конкретного слова из текста в ячейке (Формулы/Formulas)
в формуле прописатьКод =ЕСЛИ(СЧЁТЕСЛИ(B7:E7;”*Передача*”)>0;”Есть”;”Нет”)
Sub FR Is Nothing
Прайслист поставщика 1artsmart
(например: желтый дом), внимание.
значение может содержать: Hugo121, простите, Ваш по концам (в запутал. Спасибо)) With End Sub работать в VBA, & vbLf & не одно значение, определенные строки и (документ итак забит
Svsh2015
yl3d
Then adr =страница 2 -
: Через вспомогательные файлы а одно словоpashulkaнесколько слов вариант с пробелами
переменной).
pashulkaLina1515
поэтому у меня “В массиве “
а много, и
выставлял в конкретные до отказа).: добрый вечер,можно также
: Vlad999 , один adr & “
база данных SQL вообще-то делал “желтый” или “дом”:, возник мой вопрос. показался мне слишком
Цикл по 20х20: Excel ? Word
: Спасибо большое! возник маленький вопрос. & iCnt2 & разных. Поэтому есть
ячейки ексель приПытливый использовать макрос,кнопка yy
адрес- одна ячейка. ” & Ws.Nameнужно из 1Из прайса всю или если возможно(так
alucard91Hugo121 запутанным. (можно 2 вложенных), ?azat Я его оформила ” ябл.” End
смысл сперва прочитать этом, чтобы взятая: YouGreed, в файл-примере:Vlad999 , не & "!" &
страницы строку разбиваю на для общего развития), На первый взгляд,: Вопрос понятен.pashulka, текст в
к каждому значению
Если в ячейке: Подскажите пожалуйста правильную
в Excel. Сама Sub
весь файл в строка вставлялась в
Извини, формула хорошаяSub yy() Dim работает.
FR.Address End Ifвытащить цены во слова
вообще “жел”(если такое
реальный разделитель данных,
Но без примера
excelworld.ru
Поиск определенного текста в файле .txt и вставка в определенную ячейку в Excel
А1 редактированию не прибавляем пробелы, ищем будет текст “папа формулу… Мне надо задача очень простая,Tanya15 словарь (ну или эксель с данными но если слово i&, j&, i1&Выдает ошибку “run-time Next Cells(i, 5) вторуюF43 возможно) у Вас это и подробного описания подлежит, так что используя Instr() + тетя = чтобы в ячейке если её решать: Мой пример в коллекцию), а после знака равенства.
не в начале i1 = Range(“B” error ’13’: Type = adr adrartsmart
сравниваются сАпострофф- задачи непонятно, что буду пытаться составитьЕсли нашли - адюльтер”, то какой B38 формула проверала в Excel. ЯSub Кнопка2_Щелчок()
затем циклом по Пока сам только предложения – сыпется. & Cells.Rows.Count).End(xlUp).Row With
mistmatch” = “” Next: Что никто задачиназваниями, моделями, номерами: Метод Range.Find си в этом вообще оптимальнее искать более четкие ключи анализ столбца, выполнение макрос нужно выполнить наличие текста “AN85A” бы использовала =VLOOKUP(“*”&A2&”*”;Sheet2!B:D;3;0).Dim i As листу всё собранное научился делать простейшийкитин CreateObject(“VBScript.RegExp”): .IgnoreCase =и подсвечивает строку End Subдля нескольких ранее не рашал прайсов параметром LookAt:=xlPart случае, можно протестировать – ключей изначально для избежания колизий. макроса, выход. 1, 2 или и в случае Но я бы Single, j As разложить по местам. импорт данных из: легко True For j
кода: ms = чуть позже. пока подобной?получаем B8или (тоже из : ясно что всегоДа и вообщеМожно и иначе 1+2 истины, то значение хотела это автоматизировать
CyberForum.ru
Single, s As