23 abril, 2021

UDF PARA EXTRAER CUALQUIER PALABRA EN UNA CADENA DE TEXTO

Hola a todos!.

Una tarea muy habitual en Excel es extraer una determinada palabra de un texto. Sobre esto ya escribí y aporté una solución en dos UDF: EXTRAER PENÚLTIMA PALABRA EN UN TEXTO

Hoy he revisado ese post y he mejorado la programación (lo hace todo en una única función) y además he añadido una nueva funcionalidad.

Os mostraré un ejemplo con un texto. He elegido el fragmento inicial de Platero y Yo de Juan Ramón Jiménez:

Como podéis observar vamos a extraer una serie de palabras en función de si lo hacemos por la izquierda o por la derecha. Pero antes de hacerlo, os voy a mostrar la UDF que he programado:

Option Explicit
Function EXTRAE_PALABRA(ByVal Target As String, P As Long, D As Boolean, R As Boolean)
    Dim MiDato As Variant, Palabra As String, MiArray As Variant, Item As Variant
    'Si R es verdadero comenzamos por la izquierda, si es falso por la derecha
    MiDato = IIf(R = True, Split(Target, " "), Split(StrReverse(Target), " "))
    Palabra = MiDato(P - 1)
    'Si D es verdadero eliminamos caracteres de la palabra.
    If D = True Then
        MiArray = Array(";", ",", ";", ":", ".")
        For Each Item In MiArray
            Palabra = Replace(Palabra, Item, "")
        Next
    End If
    'Si R es falso revertimos palabra extraída por la derecha
    EXTRAE_PALABRA = IIf(R = True, Palabra, StrReverse(Palabra))
End Function

La sintaxis de la función es la siguiente:

EXTRAE_PALABRA: Target, P, D, R

  • Target: Es la selección realizada, debe ser una celda con la cadena de texto o un texto entre comillas en la función. No se permite seleccionar un rango.
  • P: indica la palabra que queremos extraer, empieza en 1. El 0 o indicar un número superior de palabras mostrar error: ¡VALOR!
  • D: oculta o muestra caracteres tipo, coma, punto, etc en la palabra extraída. Por ejemplo evitar el punto en la última palabra de una frase. Si se indica VERDADERO o 1, se oculta, si se indica 0 o FALSO, se muestra.
  • R: Sirve para extraer las palabras empezando por la izquierda o la derecha. Si el valor es VERDADERO o 1 empezará por la izquierda, si es FALSO o 0, comenzará por la DERECHA.

Teniendo esta explicación en cuenta y el ejercicio que vamos a realizar, la función quedaría así en cada caso:

  • PRIMERA PALABRA IZQUIERDA: =EXTRAE_PALABRA(A2;1;VERDADERO;VERDADERO)
  • SEGUNDA PALABRA IZQUIERDA: =EXTRAE_PALABRA(A2;2;VERDADERO;VERDADERO)
  • PENÚLTIMA PALABRA DERECHA: =EXTRAE_PALABRA(A2;2;VERDADERO;FALSO)
  • ÚLTIMA PALABRA DERECHA: =EXTRAE_PALABRA(A2;1;VERDADERO;FALSO)

El resultado que obtendremos será el siguiente:

Perfecto, ¿verdad?. y además, en el código de la función podéis añadir al array los distintos caracteres que no queréis tener en cuenta cuando extraigáis palabras: MiArray = Array(";", ",", ";", ":", ".")

Es una función muy interesante y que nos evita utilizar grandes fórmulas anidadas o combinadas y de utilizar varias macros.

Y esto es todo, espero que os haya resultado de interés 🙂

Descarga el archivo de ejemplo pulsando en: 

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

3 comentario en “UDF PARA EXTRAER CUALQUIER PALABRA EN UNA CADENA DE TEXTO

  1. Buenos días. Saludos Migue. Necesito resolver una tarea similar, de una lista de números en una línea de excel, digamos la linea 14, contiene números repetidos, digamos 50, todos de 0 a 9, desde A14, hasta BD14, en forma aleatoria, y debo extraer, entre los repetidos, digamos a la CELDA BE1, el que haya aparecido por última vez, y que no haya repetido. Debo establecer cual número es el que haya aparecido por última vez, y que no haya repetido después, entre todos los del rango AA14: BD14. Existe alguna función estadística que lo haga.? voy a probar con contar, contara, y otras similares, pero si ocupo ayuda. gracias. saludos, que siga mejor de salud.

  2. Hola Marco:

    Para este tipo de consultas, lo más útil es escribir un correo a info@excelsignum.com enviando un excel con la consulta indicando claramente la la fila de números con los números repetidos y cual es el resultado que pretender obtener. Intuyo que lo que necesitas se debe realizar con programación.

    Saludos.

  3. Esta función me acerca al resultado, porque me indica cuáles de la lista de a1 a a9, 0-9, son los que menos aparecen, pero tiene el defecto que de antemano debo indicarle donde esta el último, o sea, a seguir buscando. =CONTAR.SI($O$14:$BB$14,$A$1).
    Además para complicar el asunto, el resultado es un número que en realidad es la posición de otro número que debo copiar a otra celda. !!!!

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies