Ir al contenido principal

comparar listas de datos en excel

Me llega una consulta desde la sección TusDudas en donde un lector me pide comparar una lista de precios contra otra, resaltando solo aquellos productos que sufrieron modificación en sus precios.
Si bien esta cuestión la podríamos resolver con las propias funciones de Excel, haré uso de las Macros, para así automatizar la tarea y que sea mas veloz y sencillo para el usuario.
Tenemos dos listas de precios, en dos hojas separadas para facilitar el trabajo. En la hoja "lista1" poseemos los siguientes registros:

En la hoja "lista2" tendremos la siguiente tabla:

Los pasos lógicos a seguir son simples: voy tomando los códigos de la hoja "lista1" y los busco en "lista2"; si lo encuentro... comparo los precios... y si el mismo varía de una tabla a la otra, resalto ambas filas.
El código en cuestión:
Public Sub CompararPrecios()
Dim Celda, RangoBusqueda As Range
Dim Precio1, Precio2
Dim Fila As Integer
Dim Codigo
Dim UltFila1, UltFila2 As Integer

'almaceno en que fila termina cada una de las tablas:
UltFila1 = Sheets("lista1").Cells(65536, 1).End(xlUp).Row
UltFila2 = Sheets("lista2").Cells(65536, 1).End(xlUp).Row

'primero quito cualquier color existente:
Sheets("lista1").Range("a2:c" & UltFila1).Interior.ColorIndex = xlNone
Sheets("lista2").Range("a2:c" & UltFila2).Interior.ColorIndex = xlNone

'defino el rango en donde buscaré los códigos de productos
Set RangoBusqueda = Sheets("lista2").Range("a1:a" & UltFila2)

'ahora recorro el rango A de la primer hoja:
For Each Celda In Sheets("lista1").Range("a2:a" & UltFila1).Cells
    'tomo el codigo del producto y lo busco en la segunda hoja
    Codigo = Celda.Value
    On Error Resume Next
    Fila = RangoBusqueda.Find(What:=Codigo).Row
    'si no se producen errores es por que encontró el código en
    'la segunda hoja. almaceno cada uno de los precios y los
    'comparo:
    If Err.Number = 0 Then
        Precio1 = Sheets("lista1").Cells(Celda.Row, 3).Value
        Precio2 = Sheets("lista2").Cells(Fila, 3).Value
        If Precio1 <> Precio2 Then
            Celda.Interior.ColorIndex = 6
            RangoBusqueda(Fila).Interior.ColorIndex = 6
        End If
    Else
        Err.Clear
    End If
Next Celda

Set RangoBusqueda = Nothing
Set Celda = Nothing




Y efectivamente corroboramos que en ambas hojas se colorearon las celdas cuyos importes difieren (en este caso, presentes en la columna C):

los productos A0002 y B0001 sufrieron modificaciones y por ello nuestra macro se encargó de resaltar sus códigos

Fijate bien de acomodar los rangos y columnas a tus necesidades. Si necesitas que el ejemplo sea un poco mas flexible voy a pedirte que me hagas llegar el archivo por mail, así analizo la estructura y acomodo el código a tu proyecto. Este ejemplo es ilustrativo y sencillo, a los efectos de brindar un código de fácil lectura y mantenimiento.... e intentar que se comprenda bien.
Como siempre, te dejo el link al archivo.
Suerte y cualquier cosa me avisas.

Comentarios

  1. En una tabla dinamica como puedo accesar a una base de datos de access desde un sitio en internet??

    ResponderEliminar
  2. en una ocasión tuve que implementar ese trabajo. levanto un post al respecto (ya que tiene sus "vueltas") y te aviso.
    por lo menos describiré la forma en la que resolví el problema, la cual espero se adapte a tus necesidades.

    ResponderEliminar
  3. te dejo el link:
    http://damianexcel.blogspot.com/2011/01/tablas-dinamica-con-access-en-un-sitio.html
    suerte y quedo al aguardo de tus noticias.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

macros: como enviar mails desde Excel (vba)

Un gran amigo "on-line", Johan Moreno, de Colombia , me hizo llegar la inquietud de cómo enviar mails desde Excel . Si bien contaba con algunas líneas de código sobre el particular, decidí retomar mi ejemplo y adaptarlo mejor a las circunstancias. Hace unos minutos termino de remitirle un correo con la solución a Johan... desde Excel y con un archivo adjunto, mismo que transcribo a continuación para ayudar a todos con esta tarea. Veamos primero las dos formas principales de enviar mails: mediante Outlook o nuestro Web Mail ( yahoo, gmail, hotmail, etc, etc ) No soy usuario de Outlook en lo absoluto: no confío en los agujeros de seguridad que continuamente aparecen y, por otro lado, t eniendo a mi alcance una herramienta tan poderosa (y gratuita) como Gmail, la cual ahora también permite sincronizar los mensaje con la Pc para verlos offline (deben activarlo en "google labs") ... no creo que me haga usuario ni hoy ni mañana. Igualmente mas adelante daré una solució

funciones: convertir numeros a letras con excel

En realidad hace tiempo que vienen consultándome sobre esto... quizás cinco o seis años . Debe ser una de las funciones mas buscadas de Excel, por lejos: la posibilidad de escribir: 1.534,63 y que en una celda aparezca magicamente "un mil quinientos treinta y cuatro c/15/100". Aquí les dejo una solución, basada en funciones , sin utilizar macros, la cual preparé exclusivamente para este Blog. A pesar de los millones de usuarios que requieren esta herramienta, no viene incorporada en Excel, debemos armarla nosotros mismos .  Luego de la imagen irá la explicación de como llegué a lograr esto, dado que es un proceso medianamente complejo , que utiliza tres o cuatro funciones básicas y requiere de varios pasos. así quedará nuestra planilla y siempre devolverá en letras el valor que ingresemos en A1 [+/-] Ver el resto / Ocultar Desde ya aclaro: esta no es " la forma " de hacerlo, simplemente es una mas, evitando el uso de macros. Sobre esta base, comencemos: 1) El núme

sopa de letras en excel

Un lector me comenta que pudo visualizar varias sopas de letras en YouTube, realizadas con Excel. Inmediatamente me dirigí a dicho sitio y busqué información al respecto. Los ejemplos son buenos y si, efectivamente, podemos armar una muy buena "sopa de letras", salvo que (digamos) es un trabajo bastante manual, cosa que intento evitar a toda costa en mis proyectos. Obviamente que la tarea de automatización incluye Macros, lo cual me insume tiempo, pero queda mucho mejor. Vamos primero a explicar muy brevemente la forma de realizar esta juego "a la clásica", para luego pasar a un desarrollo mucho mas complejo, pero también automatizado y realista. la clásica grilla de una sopa de letras [+/-] Ver el resto / Ocultar Bien, analicemos un poco la imagen superior: 1) es una grilla de 20 filas x 20 columnas, aunque bien podríamos hacerla del tamaño que quisiéramos. 2) Cada celda tiene una letra, que fue generada  mediante la anidación de dos funciones. 3) Vean ahora la ba