Búsqueda por medio de una macro

En el trabajo me enviaron una base de más de 60.000 empresas asociadas a la Cámara de Comercio, tengo como tarea mirar cuales de estas empresas están subscritas a nuestro sistema de información (es decir tienen servicios con nosotros) sin embargo al hacer un Buscarv no me cruzan todos los clientes puesto que el nombre tiene que estar exacto y comprobando algunas empresas esto varia hasta por un punto pero si aparecen.

La solicitud radica en que por medio de un macro el Excel realice la búsqueda del nombre de estas empresas en mi base de datos y me traiga el nombre con el cual esta radicado en nuestro sistema de información y yo después hago un filtro avanzado para traer el resto de información.

PST. El nombre de las empresas de la Cámara de Comercio se encuentra en la Hoja 1 columna A del libro activo y mi base de clientes está en la Columna A de la hoja 2 del mismo libro.

2 Respuestas

Respuesta

http://www.programarexcel.com/2014/10/macro-recorre-filas-busca-dato-y.html 

Hola fijate si te sirge este ejemplo que recorre las filas busca un dato.

enhttp://www.programarexcel.com/p/home.html encontrarás cientos de ejemplos qu puedes usar

Respuesta
2

Me perdí un poco.

En la hoja1 tienes todas las empresas.

En la hoja2 están tus clientes.

Quieres buscar uno por uno tus clientes en la hoja1, ¿correcto?

¿Si tu cliente se parece a una empresa, entonces, qué hago?

a) Pongo el nombre de tu cliente en la columna B de la hoja1, ¿justo a un lado del nombre de la empresa?

b) Pongo el nombre de la empresa en la columna B de la hoja2, ¿justo a un lado de tu cliente?

Si ya tienes definidas algunos criterios para la coincidencia de los nombres, describe con ejemplos como serían esos criterios.

Por ejemplo.

Tienes un cliente con el nombre "Juan"

En las empresas tienes lo siguiente:

"Juana"

"Juanes"

"Para Juan"

¿Qué debe hacer la macro?

En tu ejemplo, la diferencia es un punto, pero para excel es un carácter o una letra más.

Tal vez como ese ejemplo existan otros, entonces si ya tienes unos criterios envíamelos.

Si no tienes ninguna regla para las coincidencias, entonces con el primer registros que se parezca, ahí que haga la relación.

Hola si tienes razón es algo confuso.

Lo que deseo es la opción A. En la hoja 1 columna A se encuentran las empresas que me brindaron como modelo y en la hoja 2 Columna A están los nombres de mis clientes, lo que deseo q haga la macro es que en la Columna B de la Hoja 1 me traiga el primer valor coincidente de la Columna A de la Hoja 2.

EJM:

Adjunto un Ejemplo Corto (no tengo en este momento la base madre, si la necesitas por favor avísame) pero ten en cuenta que la base que tengo es de más o menos 60000 empresas y nosotros poseemos algo muy parecido en clientes.

Te anexo la macro. Funciona de la siguiente manera:

Lee los clientes y los busca en la hoja empresas, pero va a buscar palabra por palabra, por ejemplo:

Tienes un cliente: "Coca Cola Company"

Lo que hace la macro es tomar la palabra "Coca" y buscarlo en empresas, si lo encuentra pone el cliente.

Después busca la palabra "Cola", si la encuentra, pone el cliente.

Y por último busca la palabra "Company", si la encuentra, pone el cliente.

La macro revisa si ya puso el cliente, para no ponerlo 2 veces. En el ejemplo de "Coca Cola Company". La macro lo encuentra 2 veces, una por "Coca" y otra por "Cola", pero solamente lo registra una vez.


Otro ejemplo:

En tus clientes tienes "DirecTV Colombia", lo que hace la macro es buscar la palabra "DirecTV", pero no la encuentra, ya que en las empresas tienes: "Direc" y "TV", es decir, tienes 2 palabras.

Si por el contrario en clientes tuvieras: "Direc" "Tv" "Colombia" (3 palabras) y en empresas tuvieras "Directv", la macro la encontraría 2 veces, una por "Direc" y otra por "tv".


Otro ejemplo:

Si en empresas tuvieras una empresa llamada: "Company"

La macro te pondría en la columna B "Movistar Company" y en la columna C "Coca Cola Company". Serían 2 coincidencias, que después tendrías que verificar cuál es la correcta.



Sub CompararEmpresas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.StatusBar = False
    Set h1 = Sheets("Hoja1")    'empresas
    Set h2 = Sheets("Hoja2")    'clientes
    '
    uc = h1.UsedRange.Columns(h1.UsedRange.Columns.Count).Column
    If uc = 1 Then uc = 2
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range(h1.Cells(2, 2), h1.Cells(u, uc)).ClearContents
    '
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        Application.StatusBar = "Comparando cliente: " & i
        pals = Split(h2.Cells(i, "A"), " ")
        For k = LBound(pals) To UBound(pals)
            dato = pals(k)
            Set b = h1.Columns("A").Find(dato, lookat:=xlPart)
            If Not b Is Nothing Then
                f = b.Row
                uc2 = h1.Cells(f, Columns.Count).End(xlToLeft).Column + 1
                Set d = h1.Range(h1.Cells(f, 2), h1.Cells(f, uc2)).Find(h2.Cells(i, "A"), lookat:=xlWhole)
                If d Is Nothing Then
                    h1.Cells(f, uc2) = h2.Cells(i, "A")
                End If
            End If
        Next
    Next
    Application.ScreenUpdating = True
    Application.StatusBar = False
    MsgBox "Terminado"
End Sub

S a l u d o s . D a n t e   A m o r

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas