lunes, 12 de diciembre de 2011

Las funciones DERECHA, LARGO y ENCONTRAR en Excel.

Abordaré hoy el uso combinado (más bien anidado) de varias funciones de texto, como son DERECHA, LARGO y ENCONTRAR. Pretendo dar solución con ello al problema planteado por un lector que preguntaba la forma de ordenar una tabla de datos según una parte del texto de una columna.
Veamos cuales son los datos de partida y cómo queremos obtenerlos:

Las funciones DERECHA, LARGO y ENCONTRAR en Excel.


Podemos ver más claro en la imagen cuál es nuestro objetivo. Debemos ordenar no por Primer Apellido, si no por el Nombre, que encontramos a la derecha de cada celda, únicamente separado por espacios...
Nuestra labor comienza entonces por convertir nuestro rango de datos en una Tabla de Excel(Ctrl+q para Excel 2007 ó Ctrl+t para Excel 2010), para luego en la columna D anexa a la tabla, incorporar la siguiente función, que nos devolverá el Nombre de cada celda:
=DERECHA(DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4));LARGO(DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4)))-ENCONTRAR(" ";DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4))))


La función DERECHA(texto; núm caracteres) es muy sencilla de entender, del texto seleccionado, mostrará el número de caracteres por la derecha indicados.
La función LARGO(texto) nos dice el número total de caracteres incluido en el texto seleccionado.
La función ENCONTRAR(texto buscado; dentro de) nos dirá la posición, contando de izquierda a derecha, del texto o caracter buscado dentro de la celda seleccionada.
Estas funciones de texto, en principio muy sencillas, cobran relevancia cuando somos capaces de combinarlas adecuadamente. Analicemos, entonces, nuestra fórmula.

Observamos cuál es nuestro primer argumento de la función principal DERECHA:
DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4))
a su vez otra función anidada DERECHA, que extrae del texto de la celda B4, un número igual a los caracteres que nos dice la fórmula
LARGO(B4)-ENCONTRAR(" ";B4)
esto es, los 20 caracteres por la derecha del texto 'ADAMEZ BARRIOS ARMANDO JOSE'; para nuestro ejemplo, nos deja fuera el Primer apellido: 'BARRIOS ARMANDO JOSE'...ya estamos en marcha. Sólo nos queda eliminar el Segundo apellido.

Para dejar fuera el segundo apellido, o lo que es lo mismo, obtener únicamente el Nombre, trabajaremos sobre el segundo argumento de la función principal DERECHA:
LARGO(DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4)))-ENCONTRAR(" ";DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4)))
es algo más larga, pero en esencia, trabajamos de igual forma que en el paso anterior. Obtenemos el número de caracteres que cuentan por la derecha para eliminar del texto obtenido en el primer argumento el Segundo apellido. Vemos como contamos el número de caracteres del texto anterior 'BARRIOS ARMANDO JOSE', para luego encontrar el siguiente espacio en blanco, el que separa Nombre y Apellido, para saber sobre este texto, cuántos caracteres por la derecha nos interesan. En este ejemplo, finalmente obtendríamos el texto 'ARMANDO JOSE'.

Una vez incorporada nuestra función a la Tabla de datos, ya podremos realizar la ordenación por el nuevo campo, obteniendo el resultado esperado.

Las funciones DERECHA, LARGO y ENCONTRAR en Excel.

23 comentarios:

  1. me sirbio mi estimado amigo gracias de verdad

    ResponderEliminar
  2. gracias amigo.. una pregunta para buscar, si solo tiene el primer nombre y el primer apellido, en la lista

    ResponderEliminar
    Respuestas
    1. Hola Jugaz,
      si sólo tienes Apellido y Nombre, puedes extraer el nombre con la ´fórmula':
      =DERECHA(A1;LARGO(A1)-ENCONTRAR(" ";A1))

      Slds

      Eliminar
  3. Hola, tengo 5 frases distintas en una columna y, en la columna contigua necesito una función que me sirva para extraer todas las frases enteras menos la primera palabra de cada una. También necesito otra función que pueda extraer la segunda palabra de todas ellas.

    Muchas gracias!!!

    ResponderEliminar
    Respuestas
    1. Hola,
      para la primera palabra:
      =IZQUIERDA(A1;ENCONTRAR(" ";A1))

      para la segunda
      =EXTRAE(A1;ENCONTRAR(" ";A1)+1;ENCONTRAR(" ";A1;ENCONTRAR(" ";A1)+1)-ENCONTRAR(" ";A1))

      Espero te sirva
      Saludos

      Eliminar
  4. hola amigo. esto lo necesito pero ocupo encontrar el texto que contiene S1
    y el la celda dice:
    "casa S1.1"

    ResponderEliminar
    Respuestas
    1. Hola,
      puedes combinar algunas funciones para determinar si contiene o no esa cadena de caracteres 'S1':
      =SI(ESERROR(ENCONTRAR("S1";B2));"No encontrado";"encontrado")
      suponiendo en B2 la cadena original 'casa S1.1'
      Saludos cordiales

      Eliminar
  5. ESTIMADO MUCHAS GRACIAS POR EL APORTE,
    PERO TENGO UN INCONVENIENTE
    EN EL CASO QUE TENGA UN NOMBRE POR EJEMPLO: "DE LA CRUZ GOMEZ JOSE FERNANDO" CON LA FORMULA INICIAL "=DERECHA(DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4));LARGO(DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4)))-ENCONTRAR(" ";DERECHA(B4;LARGO(B4)-ENCONTRAR(" ";B4))))" EL RESULTADO SERIA GOMEZ JOSE FERNANDO. ENTONCES QUE SE PODRIA HACER EN ESTE CASO YA QUE LO CORRECTO SERIA "JOSE FERNANDO" MUCHAS GRACIAS

    ResponderEliminar
    Respuestas
    1. Hola,
      bueno, lo ideal sería estuviera separado Apellidos y Nombre por algún separador (como o similar), para localizarlo y extraerlo..
      Tal cual lo planteas no existiría una regla estándar para extraer los nombres simples de los compuestos...

      Un saludo

      Eliminar
  6. ME GUSTARÌA SABER COMO EXTRAER EL BARRIO YA QUE LAS DIRECCIONES SON MUY VARIABLES

    ResponderEliminar
    Respuestas
    1. Hola Sandra, que tal?
      Un gusto saludarte igualmente.

      Para poder extraer el 'barrio' o cualquier otra cosa, tendría que saber cómo están distribuidos los datos dentro de las celdas...
      En general se trata de encontrar una regla o algoritmo que sirva para todos los casos.

      Un cordial saludo

      Eliminar
  7. Cómo puedo extraer la penúltima palabra de un texto cualquiera?

    ResponderEliminar
    Respuestas
    1. Hola serna,
      que tal?, un placer saludarte igualmente.

      Creo que lo más simple sería construir una función personalizada con VBA, empleando la función split.
      Echa un vistazo a:
      http://excelforo.blogspot.com.es/2011/11/vba-la-funcion-split-en-una-macro-de.html

      Tu separador sería el espacio en blanco, y el dato a retornar de la matriz generada el penúltimo ubound menos uno.

      Saludos

      Eliminar
  8. Hola si tengo pedro raul ramos lopez como puedo hallar el tercer ultimo digito del segundo apellido ( seria la letra p ).

    ResponderEliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  10. BUENAS NOCHES:

    Si tengo A1-B2-C0002 Y QUIERO ENCONTRAR EL CARÁCTER DE DERECHA A IZQUIERDA QUE PUEDO HACER? si es el guion "-"

    ResponderEliminar
    Respuestas
    1. Hola,
      si son siempre dos guiones:
      =ENCONTRAR("-";CELDA;ENCONTRAR("-";CELDA)+1)

      Saludos

      Eliminar
  11. Hola que tal, tengo una celda con este contenido \\DESKTOP-2KB3721\Users\PC\Desktop\ADMIN\2017\ESTADO DE CUENTA\LABORATORIO17.xlsm, como puedo extraer el texto que se encuentre despues del ultimo Backslash o sea LABORATORIO17.xlsm, cabe indicar, que el texto podría ser variable pero siempre se necesita extraer el texto despues del ultimo backlash.
    Gracias por tu aporte, es muy bueno!

    ResponderEliminar
    Respuestas
    1. Hola,
      supongo que lo querrás con programación:
      Partes = Split(tuRuta, Application.PathSeparator)
      NombreFichero = Partes(UBound(Partes))


      Con fórmulas es algo más largo...
      Subiré un post...
      Saludos

      Eliminar
  12. Estimado felicitaciones por tantos conocimientos tan utiles para realizar estas tediosas tareas. Mi consulta es como extraer el los importes de los siguientes numeros que los copio y pego en excel y corresponden a liquidaciones que salen con imputacion presup. etc.
    Le copio y pego un ejemplo:

    C10 (R 03/2019) Basico 0,00 417,50 . 417,50 A-0001-015.000.000-11-28.10.00.01.00-3.4 quisiera obtener en la celda contigua 417,50

    C30 (R 03/2019) Antigüedad 0,00 125,25 . 125,25 A-0001-015.000.000-11-28.10.00.01.00-3.4 quisiera obtener en la celda contigua 125,25

    C113 (R 03/2019) A.Rem.NBon. 0,00 -570,00 . -570,00 A-0001-015.000.000-11-28.10.00.01.00-3.4 quisiera obtener en la celda contigua -570


    S381 (R 03/2019) ADEL.NRNB 0,00 199,90 . 199,90 A-0001-015.000.000-11-28.10.00.01.00-3.4 quisiera obtener en la celda contigua 199,9

    Le agradezco mucho su ayuda. Saludos cordiales

    ResponderEliminar
    Respuestas
    1. Hola Marcelo
      con los datos detallados servirá:
      =VALOR(EXTRAE(A1;ENCONTRAR(" . ";A1)+2;ENCONTRAR("A-";A1)-ENCONTRAR(" . ";A1)-2))

      Saludos y gracias!

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.