Barry a menudo se encuentra deseando identificar la enésima aparición de un carácter dentro de una cadena de texto. Sabe que puede usar las funciones de la hoja de trabajo BUSCAR y ENCONTRAR para encontrar una ocurrencia inicial, pero no está seguro de cómo encontrar, digamos, la tercera aparición de la letra «B» dentro de una cadena de texto.

En realidad, la función BUSCAR podría usarse para encontrar la ocurrencia deseada, de la siguiente manera:

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

Observe cómo la función SEARCHB se usa de manera anidada. La fórmula especifica lo que se busca (la letra «b») y el número de niveles de anidamiento indica qué ocurrencia dentro de la celda desea encontrar. La fórmula devuelve la posición del carácter deseado dentro de la celda.

El problema con tal fórmula, por supuesto, es que es difícil de mantener y puede volverse inutilizable rápidamente si desea encontrar, digamos, la séptima aparición.

Una fórmula más flexible sería la siguiente:

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

Esta fórmula examina el valor en A1. Sustituye el código CHAR (1) por la tercera aparición de «B» dentro de la celda. La función ENCONTRAR luego busca dentro de la cadena resultante la posición donde ocurre CHAR (1).

Si la ocurrencia deseada no existe, la fórmula devuelve un error #VALOR.

Si lo prefiere, puede crear una función definida por el usuario que buscará la enésima posición de un carácter. La siguiente es una macro muy simple que toma tres argumentos: la cadena que se buscará, el texto que debe coincidir y la posición deseada.

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

La función distingue entre mayúsculas y minúsculas en lo que busca y devuelve la posición dentro de la cadena especificada en la que se produce el valor sFindWhat. Si no ocurre nada en la instancia especificada, la función devuelve un 0. A continuación se muestra cómo se puede usar la función en una hoja de trabajo:

=FindN("b",C15,3)

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3324) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posteriores) aquí:

link: / excelribbon-Finding_the_Nth_Occurrence_of_a_Character [Encontrar la enésima aparición de un personaje].