Extraer parte de la cadena

5 envíos / 0 nuevos
Último envío
Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 11 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1620
Extraer parte de la cadena

Hola a todos:

Tengo algunos cientos de celdas rellenados con cadenas compuestas de letras y numeros.

Todas las cadenas, comienzan con letras, pero tienen tambien numeros como parte de la cadena. Ejemplos: AB67RT, RUT1DEF, MBCF01G (M B C F cero uno G), S2T, etc.

Quiero poder extraer la parte de la cadena que comenzando con el primer caracter(siempre letra) se componga solamente de las letras hasta que se encuentre con el primer numero, sea el que sea.

En los ejemplos dados, el resultado deberia ser: AB, RUT, MBCF, S.

Supongo que deberia encadenar algunas funciones... pero no acierto...

Gracias anticipadas.

Cron
Imagen de Cron
Offline
última acción: Hace 1 mes 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12715
Pues se puede hacer, solo con

Pues se puede hacer, solo con fórmulas, pero es un poquillo complicado. Voy a explicarlo por pasos:

Imagino que conoces la fórmula ENCONTRAR. En el primer argumento pones el valor que quieres encontrar. Nosotros queremos encontrar el primer número en la cadena. El problema es que el primer número puede ser cualquiera de entre los 10 dígitos. Eso lo vamos a resolver con una fórmula matricial, y el primer argumento, en vez de ser un número, será un vector/arreglo/conjunto de los 10 dígitos. Haríamos algo así:

=ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A1)

Esto es contando con que el texto está en A1. Para que Excel entienda la fórmula como matricial, al terminar de escribirla hay que pulsar Ctrl+Mays+Enter. Al hacer esto, Excel pone unas llaves por fuera de la fórmula. En la barra de fórmulas verás algo así:

{=ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A1)}

Pero es importante incidir en que las llaves exteriores las pone Excel. No sirve que las pongamos nosotros.

El resultado en la celda será #VALOR si no hay ningún 0 (la celda presenta por defecto el primer valor del resultado, pero en realidad está trabajando con una lista de resultados, que son lo que sale de aplicar cada uno de los valores que hemos introducido 0, 1, 2... a la fórmula ENCONTRAR.

Una vez hecho esto, vamos a eliminar los errores para poder operar con los resultados. Haremos lo siguiente:

=SI.ERROR(ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A1);5000)

El valor que representamos si encontramos un error es un número muy grande. Esto es porque como vamos a buscar el mínimo, nos vale cualquier valor que sea mayor que la longitud de la cadena más larga. No olvidarse de introducir la fórmula con Ctrl+Mays+Enter.

Lo haremos de esta manera:

=MIN(SI.ERROR(ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A1);5000))

Si se introduce esta fórmula como matricial, Ctrl+Mays+Enter, el resultado será la posición en la cadena del primer dígito. Imaginemos que en A1 hemos introducido la cadena AB67RT. En este caso, el resultado debería ser 3, porque el primer dígito (el 6) está en la tercera posición de la cadena.

Ya solo nos queda recortar la cadena para quedarnos con la parte de la izquierda. La longitud de la cadena que queremos es una unidad menor que el valor obtenido. Si el primer dígito está en la posición 3, la longitud de la cadena que quiero es 2. Haremos lo siguiente:

=IZQUIERDA(MIN(SI.ERROR(ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A1);5000))-1)

SI no olvidas introducir la fórmula con Ctrl+Mays+Enter, tendrás la parte de texto que hay en tu código justo antes del primer número. Sustituye A1 por la celda donde tengas tus datos y está hecho.

Una vez tengas definida la fórmula para la primera celda, simplemente arrástrala a lo largo de toda la columna para que te dé los valores relativos a cada dato.

Un saludo

Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 11 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1620
Hola Cron:Muchas gracias por

Hola Cron:

Muchas gracias por tu respuesta rapida y efectiva.

Al final, tu sugerencia ha funcionado sin problemas.

Digo al final, porque he tenido que aplicar tu solucion en dos etapas.

Veras. En la celda A1 esta la cadena ejemplo AB67RT

En la celda B1 he puesto tu formula final... =IZQUIERDA(MIN(SI.ERROR(ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A1);5000))-1) (siempre con Ctrl+Mays+Enter) y sorprendentemente me daba como resultado 2, que es el resultado de la etapa anterior de tu planteamiento, antes de erxtraer los dos caracteres de la izquierda de la cadena...

Asi que visto lo visto... he situado en B1 la formula anterior : =MIN(SI.ERROR(ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A1);5000))-1

Y de esa manera en la celda B1 tengo 2 como respuesta

En la celda C1 he puesto sencillamente IZQUIERDA(A1,B1) y evidentemente me ha dado la respuesta buscada =  AB.

Asi que al final, ha funcionado, que es de lo que se trataba.

Muchas gracias amigo Cron, pues ademas no es la primera ocasion en que acudes en mi ayuda...

Saludos

Cron
Imagen de Cron
Offline
última acción: Hace 1 mes 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12715
Efectivamente, fallo mío. Lo

Efectivamente, fallo mío. Lo podrías hacer en una etapa poniendo la siguiente fórmula:

=IZQUIERDA(A1;MIN(SI.ERROR(ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A1);5000))-1)

Olvidé poner el primer parámetro de la función IZQUIERDA, que es el texto que quieres recortar.

Un saludo

Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 11 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1620
Gracias Crol

Perfecto, amigo Crol.

Resuelto al 100% el tema planteado.

Me has ayudado a la vez que me has enseñado. Muchas gracias de nuevo.

Saludo cordial