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

Respuesta
1

No me queda muy claro como pretendes realizar la búsqueda.. Si pudieras desglosar más un ejemplo.

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!

Por los ejemplos que pones se podría construir la columna C, en eso estaba pensando con la siguiente fórmula:

Aunque no me queda claro porque en algunas incluyes el "Max" y en otras no.. Tal ves no he terminado de entender, de cualquier manera ya te dejaron una macro, ya nos dirás tus comentarios.

Respuesta
1

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

Ok, paso enlace:

https://drive.google.com/file/d/1-tA6c8H5x_YcGgvVTogD8jEXHiFi0hKH/view?usp=sharing 

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 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas