martes, 21 de agosto de 2018

Extraer la última palabra o parte de un texto de una celda de Excel


Muchos usuarios conocen algunas funciones de Excel como IZQUIERDA, DERECHA, EXTRAE, ENCONTRAR, LARGO, etc. Estas funciones, ya sea en solitario o actuando coordinadamente entre ellas, pueden conseguir con más o menos dificultad extraer cualquier palabra o cadena de texto desde la parte izquierda, central o derecha de un texto que pueda haber en una celda.



La cuestión se complica si lo que queremos extraer no tiene un ancho fijo (un número fijo de caracteres). Pero tiene también solución si, como hemos comentado antes, ponemos a trabajar juntas a varias funciones anidadas. Por ejemplo, para extraer la palabra de la izquierda (la primera palabra) de un texto que tiene varias palabras, podríamos utilizar la siguiente fórmula:

=IZQUIERDA(A1;ENCONTRAR(" ";A1))

Donde A1 es la celda donde se encuentra el texto

Pero, ¿y si necesitamos extraer la última palabra de una frase, el último apellido de una persona, la última parte de un código o el dominio de un email? Esto sería algo más difícil y deberíamos anidar también varias funciones, dando como resultado una función relativamente compleja.

Una cómoda y elegante solución podría ser la creación de un complemento de Excel (addin) que contuviera una UDF (User Defined Function) o Función Definida por el Usuario. La creación de una UDF se realiza mediante unas líneas de código VBA. Esas líneas de código las vamos a alojar en un libro de Excel que convertiremos a complemento mediante Guardar como.... Una vez completado el proceso, tendremos a nuestra disposición, en nuestro Excel, una función más dentro de todas las funciones que ya teníamos propias de Excel. Además, tendríamos la ventaja añadida de poder elegir el carácter que separa lo que queremos extraer del resto de la cadena.

Para crear una UDF dentro de un addin que esté listo para ser usado, debemos:

PASO 1)
Crear un libro de Excel nuevo, presionar ALT+F11 e insertar un módulo estándar en el proyecto Libro1 (si el libro nuevo se llama Libro1). Así pues, una vez ya hemos presionado ALT+F11, tenemos que hacer...


PASO 2)
Pegar en la ventana que se ha abierto a la derecha el código siguiente:

Function ULTIMA_PALABRA(strTexto As String, Optional strSeparador As String) As String

    'UTILIDAD:  extrae de un texto los caracteres que hay después del último separador
    'SINTAXIS:  =ULTIMA_PALABRA(texto;[separador])
   
    'Texto:         un texto, número o ref. a la celda de donde tenemos que extraer
    '[separador]:   uno o varios caracteres de texto (debe ir entre comillas)
   
    'Si no se especifica, [separador] es un espacio

   
    If strSeparador = "" Then strSeparador = " "
    Dim bytLargo As String:         bytLargo = Len(strTexto)
    Dim bytEncontrar As Integer:    bytEncontrar = InStr(strTexto, strSeparador)
   
    ULTIMA_PALABRA = Right(strTexto, bytLargo - bytEncontrar)

End Function




Una vez pegado el código, debe verse así en la ventana de código:




PASO 3)
Guardar el Libro1 como... Tipo de archivo: Complemento de Excel (tan solo con elegir la opción Complemento de Excel, la ruta de guardado para el archivo cambia automáticamente y es conveniente respetarla). En cuanto al nombre del archivo, escribimos el que deseemos. Por ejemplo, MisComplementos.

PASO 4)
Ahora, debemos asegurarnos de que Excel cargue el complemento cada vez que se inicie. Para ello, hacemos clic en... ficha Archivo / Opciones / Complementos / Complementos de Excel / Ir...




PASO 5)
Activar el complemento (lo veremos en la lista con el nombre que dimos en el paso 3) y Aceptar.





PASO 6)
Una vez hecho lo anterior, cerramos Excel SIN GUARDAR Libro1 (puesto que ya lo guardamos antes convirtiéndolo a complemento de Excel) y lo abrimos de nuevo.

Ya podemos utilizar la función ULTIMA_PALABRA como si fuera otra función de Excel:

 

 Podemos comprobar que la sintaxis de nuestra nueva función es:

=ULTIMA_PALABRA(texto;[separador])

texto:               un texto, número o ref. a la celda de donde tenemos que extraer
[separador]:    uno o varios caracteres de texto (debe ir entre comillas). Si no se especifica, [separador] es un espacio

Por lo tanto, podemos deducir que también podemos extraer la última parte de una cadena de texto que tenga cualquier separador. Por ejemplo, en la imagen de abajo tenemos unos códigos que tienen una última parte separada siempre por un guion. Pues con nuestra nueva función ULTIMA_PALABRA podemos extraer esa parte final del código utilizando como segundo argumento un guion (siempre debemos poner nuestro separador entre comillas, al ser una cadena de texto):










En Mac, el proceso es prácticamente idéntico y solo cambian algunas imágenes y algunos detalles. Lo que exponemos a continuación son los cambios que podemos apreciar, respecto del trabajo en Windows:

PASO 1)


PASO 3)
En Mac, Excel no establece una ruta conveniente de guardado de forma automática, sino que debemos elegir una (la que queramos) para saber dónde tenemos alojado nuestro addin.

PASOS 4) y 5)
En Mac, para activar un complemento debemos ir al menú Excel / Preferencias... / Barra de herramientas y cinta de opciones


 ... y activar la casilla de Ficha Programador



 ...salimos aceptando cambios y ya tenemos una nueva Ficha o Pestaña llamada Programador. En ella, debemos hacer clic en Complementos de Excel.







 José Manuel Pomares Medrano
 

2 comentarios:

  1. Hola.
    Antes de nada, quiero dar las gracias por vuestra difusion sobre excel.
    Acabo de leer este post y al leer la funcion de ULTIMA_PALABRA vi raro el codigo que publicais y que he comprobado que no funciona bien.
    Os paso una version que funciona:

    Function ULTIMA_PALABRA(strTexto As String, Optional strSeparador As String = " ") As String

    'UTILIDAD: extrae de un texto los caracteres que hay después del último separador
    'SINTAXIS: =ULTIMA_PALABRA(texto;[separador])

    'Texto: un texto, número o ref. a la celda de donde tenemos que extraer
    '[separador]: uno o varios caracteres de texto (debe ir entre comillas)

    'Si no se especifica, [separador] es un espacio

    Dim it As Variant: it = Split(strTexto, strSeparador)
    ULTIMA_PALABRA = it(UBound(it))

    End Function

    Espero que pueda ser util para alguien....

    ResponderEliminar
  2. He visto varios estudios sobre Excel disponibles, desde libros hasta cursos en línea como este https://cursos-gratis.com.es/c-curso-gratis-curso-superior-excel-2007-nivel-experto-online creo que este tipo de cursos son útiles para aquellos que buscan ampliar sus conocimientos de Excel y aprender cómo utilizar la herramienta de manera eficiente.

    ResponderEliminar