Поиск макросов в диапазоне ячеек

Хотите написать макрос, который будет искать определенное слово в ряде ячеек (или после ячейки), скажем, «привет» в нашем случае. Предположим, что моя таблица выглядит так:

Привет, пользователь
Привет, Нэнси
Привет, счет 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") 

Результаты:

Результаты

Interesting Posts

Компиляция данных в столбцы для экспорта в CSV / excel

сервер обмена. найти пользователей с 'вне офиса' собственность равна 1

Excel – найти наименьшую разницу между значением и списком и связанным индексом

Как сохранить .List из списка со списком в переменную

Кнопка экспорта файла без навигации по страницам в ASP.net MVC4

множественный условный оператор PercentRank в excel

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

Создание диаграммы в python 3.5 с использованием XlsxWriter, где значения ряда основаны на цикле

Сохранение формул при заполнении данных в массив и переносе между двумя объектами списка Excel-VBA

Синтаксис Vlookup и проблемы с вводом пользователя

Как улучшить вычисление формулы с помощью PHPExcel?

Реализация VBA-карты

изменение легенды в графе рассеяния excel

Извлечь текст из документа word (docx), который содержит таблицы excel с Apache POI

Excel 2010 32-разрядные окна 7 64-разрядный odbc- Проблема с подключением

Давайте будем гением компьютера.