Барри часто обнаруживает, что хочет идентифицировать N-е вхождение символа в текстовой строке. Он знает, что может использовать функции рабочего листа SEARCH и FIND для поиска начального вхождения, но не знает, как найти, скажем, третье вхождение буквы «B» в текстовой строке.

Фактически, функцию ПОИСК можно использовать для поиска нужного вхождения следующим образом:

=SEARCHB("b",G20,(SEARCHB("b",G20,(SEARCHB("b",G20,1)+1))+1))

Обратите внимание, как функция SEARCHB используется вложенным образом. Формула определяет, что ищется (буква «b»), а количество уровней вложенности указывает, какое вхождение в ячейке вы хотите найти. Формула возвращает положение желаемого символа в ячейке.

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

Более гибкая формула была бы следующей:

=FIND(CHAR(1),SUBSTITUTE(A1,"B",CHAR(1),3))

Эта формула проверяет значение в A1. Он заменяет код CHAR (1) на третье вхождение «B» в ячейке. Затем функция НАЙТИ ищет в результирующей строке позицию, где встречается CHAR (1).

Если желаемое вхождение не существует, формула возвращает ошибку #VALUE.

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

Function FindN(sFindWhat As String, _   sInputString As String, N As Integer) As Integer     Dim J As Integer

Application.Volatile     FindN = 0     For J = 1 To N         FindN = InStr(FindN + 1, sInputString, sFindWhat)

If FindN = 0 Then Exit For     Next End Function

Функция чувствительна к регистру в том, что ищет, и возвращает позицию в указанной строке, в которой встречается значение sFindWhat. Если в указанном экземпляре нет вхождений, функция возвращает 0. Ниже показано, как функцию можно использовать на листе:

=FindN("b",C15,3)

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (3324) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздние версии) здесь:

link: / excelribbon-Finding_the_Nth_Occurrence_of_a_Character [Поиск N-го появления символа].