Tony tiene un montón de datos en una hoja de trabajo que consta de dígitos y otros caracteres. Por ejemplo, podría tener una celda que contenga «1234567Blue». Tony quiere poder averiguar la posición del personaje en la que aparece el primer carácter que no es un dígito. En el ejemplo del texto «1234567Blue», Tony quiere alguna forma de averiguar que el primer carácter que no es un dígito está en la posición 8.

Hay dos formas principales de obtener el valor que desea. La primera es utilizar una fórmula de matriz para calcular la posición. La siguiente fórmula de matriz (ingresada usando Ctrl + Shift + Enter) funcionará en la mayoría de los casos:

=MATCH(TRUE,ISERROR(VALUE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))),0)

Los únicos casos en los que esta fórmula de matriz no funcionará es si la celda A1 está vacía o contiene un valor estrictamente numérico. Si su lista puede contener este tipo de datos (o ningún dato), entonces debería considerar usar una fórmula de matriz un poco más larga:

=IF(LEN(A1)=0,0,MIN(IF(1ISNUMBER(1MID(A1,ROW(INDIRECT("A1:A"& LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))* (ISNUMBER(A1)=FALSE)

Recuerde que es una fórmula de matriz única, ingresada usando Ctrl + Shift + Enter. Manejará correctamente los casos en los que A1 no contenga caracteres que no sean dígitos (como en una celda en blanco o un valor como «123»).

Por supuesto, la otra forma en que puede manejar averiguar la posición del primer carácter que no es un dígito es crear una función definida por el usuario. Hay muchas formas diferentes de implementar una macro de este tipo. Una de las formas más fáciles de implementar la macro es simplemente pasar por cada carácter en lo que se pasa a la macro. Cuando se encuentra un carácter que está fuera del rango del código ASCII para dígitos (48 a 57), entonces sabe que ha encontrado la primera posición. La siguiente macro muestra una forma de hacer este tipo de técnica:

Function FirstNonDigit(str As String)

Dim iChar As Integer     Dim iPos As Integer     Dim J As Integer

Application.Volatile     iPos = 0     For J = 1 To Len(str)

iChar = Asc(Mid(str, J, 1))

If iChar <= 47 Or iChar >= 58 Then             iPos = J             Exit For         End If     Next J     FirstNonDigit = iPos End Function

Para usar la función, simplemente use una fórmula como esta en su hoja de trabajo:

=FirstNonDigit(A1)

Si la celda a la que hace referencia está vacía o si solo contiene dígitos, la función devuelve un valor 0.

_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 (3364) 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 posterior) aquí:

link: / excelribbon-Finding_the_First_Non-Digit_in_a_Text_Value [Encontrar el primer no dígito en un valor de texto].