Поиск макросов в диапазоне ячеек
Хотите написать макрос, который будет искать определенное слово в ряде ячеек (или после ячейки), скажем, «привет» в нашем случае. Предположим, что моя таблица выглядит так:
Привет, пользователь
Привет, Нэнси
Привет, счет 2
Содержание сменного листа меняется ежедневно, так что у меня может быть различное количество «Hello» каждый день. Я хочу скопировать число (2) рядом с последним «Hello» в другую ячейку. Если число слов hello не выходит, оно будет помещать 0 в эту ячейку (обратите внимание, что даже если число слов равно 0, в этом распространенном листе все еще может быть «привет»). Местоположение последнего Hello всегда будет после Cell A17.
Я подумал о настройке параметра After на ячейку A17 и сменил SearchOrder на xlByColumns, но когда поиск достигнет конца диапазона поиска, он окутается в начало диапазона.
Как мне прекратить поиск, когда это происходит?
Я также пытаюсь использовать метод Find внутри With для поиска в диапазоне от A17 до B22:
With Sheets("Data").Range("A17:B22") Set hello = Cells.Find(What:="hello", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) End With If Not hello Is Nothing Then With Sheets("Data").Range("A17:B22") Cells.Find(What:="Hello", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate ActiveCell.Offset(0, 1).Range("A1").Select Application.CutCopyMode = False Selection.Copy Range("B17").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End With Else Range("B17").Select ActiveCell.FormulaR1C1 = "0" End If
Но он все равно найдет поиск в первом «Hello» в электронной таблице.
Попробуй это:
Function GetLastNumber(TheRange As Range, TheWord As String) As Variant Dim Finder 'You can add LookAt:=xlWhole if you want entire word only Set Finder = TheRange.Find(TheWord, SearchDirection:=xlPrevious) If Finder Is Nothing Then GetLastNumber = CVErr(xlErrNA) Else 'Return the value of the cell one column to the right of our search word GetLastNumber = Finder.Offset(0, 1).Value End If End Function
Вы можете использовать его следующим образом:
Sub Test() Range("D1") = GetLastNumber(Range("A1:A11"), "Hello") End Sub
Вы также можете использовать его в качестве формулы:
=GetLastNumber(A1:A11,"Hello")
Результаты: