Macro para buscar distintos textos en celdas

Necesitaría saber como hacer una macro que pueda dar solución al siguiente problema:
1- Tengo una lista enorme de textos como el siguiente: " ai21200 074-ajblister-marca1". Por ejemplo:
Marca3-ai1504 06-ajset de 6 piezas-
Ai21200 074-ajblister-marca1
Marca3-ai404 3-ajunidad-
Marca2-ai3335-ajjuego x tres piezas-
Ai21100 375-marca2ajjgo. 3 unidades-
Sin marca-ai8-ajcajas-
Ai1504-ajblisterx12unidades-marca3
Marca1-ai3335-ajvx3pzs.-
Ai3335-ajjgo.x 3 pzs.-Marca2
2- Este texto no es uniforme, pero en algún punto lleva el valor que estoy buscando (por ejemplo "marca1"). Quiero que junto a cada celda del listo, me devuelva los valores que me interesan, por ejemplo:
Marca3-ai1504 06-ajset de 6 piezas-…... Marca3
ai21200 074-ajblister-marca1………………….……. Marca1
marca3-ai404 3-ajunidad- ……………………………. Marca3
(La línea punteada la puse para indicar que son celdas separadas)
Ya intenté usando la función Si y HALLAR, de la siguiente forma: +SI(HALLAR($AP$5;AH1769;1);$AP$5;""), donde $AP$5 sería "marca1" y AH1769 sería "ai21200 074-ajblister-marca1" pero surgió el inconveniente de que el listado de los valores que estoy buscando es demasiado largo ("marca1"; "marca2"; "sin marca"; y un largo etcétera), quedándome en consecuencia una fórmula muy larga, dado que esa condición la tenía que poner por cada valor que me interesa buscar –añadiendo nuevas condiciones con el &-. Cuando me di por vencido cada fórmula ocupaba una carilla de Word con letra 11. Supongo que una fórmula tan extensa, multiplicada por las miles de líneas de observaciones que tengo va a acabar ocupando demasiada memoria y haciendo muy lento el archivo, y, lo que es peor, que me va a obligar a retocar la fórmula cada vez que incorporo un valor (ejemplo "marca 78"), ya que el listado de valores que me interesan se actualiza constantemente y con varios valores por vez.
Para decirlo de otro modo, necesitaría una fórmula que busque en cada línea si ésta tiene alguna palabra que coincida con una lista de palabras (marcas) que tengo, y que me devuelva ese valor. Sería muy bueno, que en vez de tener que usar SI y HALLAR por cada marca que tenga, que pueda seleccionar la lista de marcas entera y que me busque en cada celda qué valores de la lista de marcas coincide, y me las devuelva en una celda al lado de cada línea.
En fin, hace muy poco estoy aprendiendo a usar Visual Basic, de modo que si alguien me asistiera con el problema me sería de gran ayuda.
Muchas Gracias
{"Lat":-37.3352243593064,"Lng":-59.117431640625}

1 respuesta

Respuesta
2
Si he entendido el problema, no hace falta recurrir a VBA.
Por ejemplo, si la lista de palabras a encontrar está en D1:D4 y la celda en la que buscar es A1, la fórmula sería:
=INDICE($D$1:$D$4;COINCIDIR(VERDADERO;ESNUMERO(HALLAR($D$1:$D$4;A1));0))
Teniendo en cuenta que:
- Se trata de una fórmula matricial, por lo que hay que introducirla pulsando mayúsculas control entrada al mismo tiempo.
- Quizás haya que sustituir los puntos y comas por comas, dependerá del separador de listas del equipo.
Para procesar las celdas A2:A... lo único que habría que hacer es copiar y pegar la fórmula.
Si ninguna de las palabras de la lista se encuentra en la celda, la fórmula devolverá el error #N/A
Genial solución!
Justo lo que estaba buscando.
Para ser sincero, todavía no comprendo totalmente la lógica de la fórmula, pero hace tal cual lo que yo quería. La voy a investigar un poco +.
Muchas gracias!
PD: Si ninguna de las palabras de la lista se encuentra en la celda, me devolvía "0", en vez de "#N/A"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas