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.
En una tabla dinamica como puedo accesar a una base de datos de access desde un sitio en internet??
ResponderEliminaren una ocasión tuve que implementar ese trabajo. levanto un post al respecto (ya que tiene sus "vueltas") y te aviso.
ResponderEliminarpor lo menos describiré la forma en la que resolví el problema, la cual espero se adapte a tus necesidades.
te dejo el link:
ResponderEliminarhttp://damianexcel.blogspot.com/2011/01/tablas-dinamica-con-access-en-un-sitio.html
suerte y quedo al aguardo de tus noticias.