Seleccionar palabras específica de un conjunto de palabras de una celda definida en otra; proyectar el resultado en una tercera
Tengo una lista de 2000 productos en columna A, que quiero buscar en la lista de otros 1000 productos de la columna B y me proyecte el resultado en columna C, tal y como me aparece ese producto en columna A.
La dificultad viene determinada porque el producto de la columna A no viene escrito exactamente igual en la columna B, tiene palabras de por medio.
Un saludo
2 Respuestas
El problema inicial es este:
Tengo una lista de productos en la Columna A (el documento original tiene más de 2000). Tengo otra lista de productos en Columna B, que si te fijas coinciden con los de la columna A pero con mucha información por el medio.
Lo que pretendo es:
Al lado de cada producto de la columna de B (en la columna C) me aparezca el nombre "limpio" que aparece en la Columna A. Es como si fuera un buscador de la información de las celdas de A que fuera recorriendo cada Celda de B hasta obtener la celda que coincida con A por completo y proyecte este resultado en la columna C.
Como se ve en el ejemplo: B1 Huawei Honor 8X Global Version 6.5 pulgadas 4GB RAM 64GB ROM Kirin 710 Octa Núcleo 4G Smartphone, coincide con Honor 8X 64GB de la columna A (celda A7), por tanto quiero que ese valor, se me proyecte en la columna C, en este ejemplo C1 sería Honor 8X 64GB.
Espero haberme explicado.
Un saludo!
- Compartir respuesta
La fórmula queda bastante complicada para que quede en una sola celda y a la larga volverá lenta tu hoja de excel por consiguiente mejor opte por una macro este es el resultado, primero separa la palabra a buscar de la columna A, luego la busca en la columna B y extrae el resultado, después busca la palabra GB pero como tienes 2 la macro se enfoca en la 2a y de hay concatena ambos resultados quedando lo que ves en pantalla
y la macro es esta
Sub EXTRAER_DATOS() Set DATOS = Range("A1").CurrentRegion With DATOS F = .Rows.Count For i = 1 To F producto = .Cells(i, 1) detalles = .Cells(i, 2) separa = Split(producto, " ") producto = separa(0) posicion = WorksheetFunction.Search(producto, detalles, 1) posicion2 = WorksheetFunction.Search("GB", detalles, 1) posicion3 = WorksheetFunction.Search("GB", detalles, posicion2 + 2) extrae = Mid(detalles, posicion, posicion) extrae2 = Trim(Mid(detalles, posicion3 - 3, 5)) cadena = extrae & " " & extrae2 .Cells(i, 3) = cadena Next i End With Set DATOS = Nothing End Sub
Está muy bien, y me funciona sólo con los productos HONOR y sólo hasta donde está rellena la columna A, se me rellena la columna C, aunque haya más productos en la columna B.
Como he explicado la lista es enorme y no todos los productos son Honor (hay NOKIA, ALCATEL...), además HONOR 8X MAX 64GB no lo reconoce y no veo por qué, por tanto tengo que depurarla.
Podría enviarte el archivo .xlsm, para que entendieras a qué me refiero?
ESTE ES EL DOCUMENTO ORIGINAL
Con los resultados en C con esta MACRO que me pasaron en un ejemplo similar:
Sub Buscar_Palabras() 'Por Dante Amor ' 'Seleccionar palabras específica de una celda definida en otra, 'y proyectar el resultado en una tercera ' Application.ScreenUpdating = False ua = Range("A" & Rows.Count).End(xlUp).Row ub = Range("B" & Rows.Count).End(xlUp).Row For i = 2 To ua Set r = Range("B2:B" & ub) Set b = r.Find(Cells(i, "A").Value, LookAt:=xlPart) If Not b Is Nothing Then celda = b.Address Do Cells(b.Row, "C").Value = Cells(i, "A").Value Set b = r.FindNext(b) Loop While Not b Is Nothing And b.Address <> celda End If Next Application.ScreenUpdating = True MsgBox "Fin" End Sub
:
pero no me da los resultados completos, es decir que para por ejemplo Huawei Honor 8X Global Version 6.5 pulgadas 4GB RAM 64GB ROM Kirin 710 Octa Núcleo 4G Smartphone (en celda B1), sólo me da Honor 8 (celda C1), por tanto está incompleto, ya que me tendría que devolver Honor 8X 64GB en celda C1.
Sube tu archivo a onedrive o algún otro servicio de la nube y pega el link aquí para descargarlo, el problema que tienes es la relación de la columna A con la B la búsqueda requiere un trato personalizado para cada producto y para eso necesito ver como quedaría en C, ya que por ejemplo honor comienza la extracción en la intentar 8 de la columna B y Acer comienza en la intentar 1 además de en el caso de honor extrae 8 caracteres para formar hondo 8 x y para Acer tiene que extraer más de 5 caracteres y solo son dos productos te podría arreglar estos 2 pero estoy seguro que contestarías que no te sirve para x o y producto, así que lo mejor es ver tu archivo y ver que condiciones tiene cada producto
Te falto poner el resultado no se si esto sea lo que buscas, la macro pone extrae el nombre de la columna 2 y busca los GB igual que en la primera macro, si detecta una marca huawei busca la palabra honor, si te aparece algun error o no coloca nada en la celda de la columna C checa que la palabra GB este bien escrita te lo digo porque a mi me marco error la macro por que en vez de 128GB estaba escrito 128G
y esta es la macro
Sub separar_productos() Dim funcion As WorksheetFunction Set datos = Range("a2").CurrentRegion Set funcion = WorksheetFunction With datos cuenta = funcion.CountA(.Columns(2)) For I = 1 To cuenta producto = .Cells(I, 1) DETALLE = .Cells(I, 2) separap = Split(producto, " ") SEPARAD = Split(DETALLE, " ") nproducto = UCase(SEPARAD(0)) If nproducto = "HUAWEI" Then CADENA1 = SEPARAD(1) & " " & SEPARAD(2) Else CADENA1 = SEPARAD(0) & " " & SEPARAD(1) End If On Error Resume Next POSICIONG = funcion.Search("GB", DETALLE, 1) + 3 POSICIONGB = funcion.Search("GB", DETALLE, POSICIONG) - 3 CADENA2 = Trim(Mid(DETALLE, POSICIONGB, 5)) If Err.Number = 0 Then .Cells(I, 3) = CADENA1 & " " & CADENA2 Else .Cells(I, 3) = "" End If On Error goto 0 Next I set datos=nothing: set funcion=nothing End With End Sub
Ok te paso el resultado deseado:
https://drive.google.com/file/d/1v_46OOhIPmcNB6VolSjqcuNlQEJLM0Jc/view?usp=sharing
Como puedes ver, es extraer la información específica de las celdas de A, ver su coincidencia en B (entremezcladas entre otra información) y proyectarlas en C tal y como viene en A. Te pongo en letra de color rojo (columna D) en qué celda específica de columna A se encuentra el resultado en dado en C (La columna D es simplemente para ayudar a que veas qué celda se encuentra el resultado mostrado en C en la columna A, no es necesario programarla).
Un saludo
Siento decirte que esto es demasiado difícil de programar no porque no exista la solución sino porque tienes demasiado revuelta la información 32gb (un ejemplo) lo tienes también como 32 GB o 32 G cuando creía que ya tenia la macro a pesar de este error tome como referencia pulgadas y inch salio con que también tienen 5" o 5pulgadas o 5inch y con eso le dio al trasto con la macro, luego quise tomar como referencia 5.0,5.5,5.5.9,, 7,0 que es la medida en pulgadas y salio con que tienes también 5 pulgadas, 5 0 pulgadas y en varios casos no tienes esa medida o esta escrito con caracteres atípicos, e igual le dio al trasto a la segunda macro y para acabarla tienes palabras así Edición, Versión mezcladas con edición y version las cuales tienen que eliminarse, luego otra a varios Hauwei modelo honor hay que quitarle Huawei y aquí tengo la duda de cuantos más habrá en igual situación, por tanto lo que pides con ese nivel de desorden en la info es demasiado difícil
Buenas,
Ya he encontrado una forma, la cuestión es que es mediante varias fórmulas concatenadas y no sé programarlas en una macro. Paso el enlace del documento Excel con la solución y lo que hay que se pretende hacer en la macro en la fila 1 y la fórmula en la fila 2.
https://drive.google.com/file/d/1hFECwYn84_8Qxqql-GHR_vuTs0leXSN2/view?usp=sharing
Un saludo
La solución que planteas al pasarla a macro mínimo se llevara una hora (si bien te va) en hacer lo que quieres además de la complejidad en programarlo, en la imagen puedes ver el resultado de un ultimo intento que hice en este caso la macro hace una copia de tu información en la hoja 2 y sobre esa copia hace unas cuantas modificaciones a la copia, para ello en la hoja 3 cree una tabla de 4 palabras que van una de ellas borra los guiones y a las 3 restantes agregan palabras antecediendolas por un guion, ya hecho esto separa los productos de la columna B en la celda E, de ahí una segunda macro hace una comparación entre la columna A y E basándose en el ancho y contenido de ambas celdas si son iguales entonces en el contenido de las celdas de la columna E serán reemplazados por el contenido de las celdas A y en la columna F le agregara una POR, esto ultimo para casos como Apple Iphone como tienes varias versiones de esta palabra en todas pondrá la palabra Iphone y esto lo veras en los casos en que no exista la palabra completa en la columna D, en los casos en que exista la palabra te pondrá no existe, también le puse una numeración automática para efectos de que quede al final del análisis como estaba al principio, en la hoja 3 peudes añadir o quitar palabras te recomiendo que las dejes como esta, como sugerencia la macro puede que en ocasiones no te de el resultado que buscas y eso sera porque tienes escrito diferente los modelos en la columna A por ejemplo Apple Iphone S6 puedes tenerlo también como Apple Iphone ES 6.
y en este link esta el archivo con la macro https://1drv.ms/x/s!Aqt18sdMf2xXiR9A406LkksS6uYN
- Compartir respuesta