Comparar A1 "hoja1" con A1 "hoja2" de archivo adjunto vba

Tengo desarrollado un código, que probablemente se pueda depurar y simplificar, que hasta ahora hace lo que quiero.

Sub comparar()
Dim celda1 As Integer
Dim celda2 As Integer
'Dim filalibre As Integer
'El programa recorre por filas específicas i verifica que estas no contengan 0 o esten vacías
'De lo contrario oculta esas filas
'Luego compara cliente con cliente y cuando son iguales, compara sus cantidades
'Cuando las cantidades son iguales verde, si no rojo
inicioFor1 = Sheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row
'Ultima fila con datos de columna A de Hoja1
inicioFor2 = Sheets("Hoja2").Range("A" & Rows.Count).End(xlUp).Row
'Ultima fila con datos de columna A de Hoja2
celda1 = Sheets("Hoja1").Range("A1").End(xlUp).Row + 1
'Primera fila con datos de columna A de Hoja1 despues de Cliente
celda2 = Sheets("Hoja2").Range("A1").End(xlUp).Row + 1
'Primera fila con datos de columna A de Hoja2 despues de Cliente
Sheets("Hoja1").Select
For a = celda1 To inicioFor1
'Primero limpiar los vacios y los cero
    If Cells(a, 1) = 0 Or Cells(a, 1) = "" Then
        Rows(a).Select
        Selection.EntireRow.Hidden = True
            ElseIf Cells(a, 1) <> " " Then
            Rows(a).Select
            Selection.EntireRow.Hidden = False
                If ActiveCell = ActiveCell.Offset(0, 4) Then
                    If ActiveCell.Offset(0, 1) = ActiveCell.Offset(0, 5) Then
                        ActiveCell.Offset(0, 5).Select
                        ActiveCell.Font.Color = RGB(0, 150, 0)
                    End If
                        ActiveCell.Offset(0, 5).Select
                        ActiveCell.Font.Color = RGB(255, 0, 0)
                End If
            End If
Next
'Cambio de página para Primero limpiar los vacios y los cero
Sheets("Hoja2").Select
For b = celda2 To inicioFor2
    If Cells(b, 1) = 0 Or Cells(b, 1) = "" Then
        Rows(b).Select
        Selection.EntireRow.Hidden = True
    ElseIf Cells(b, 1) <> " " Then
        Rows(b).Select
        Selection.EntireRow.Hidden = False
    End If
Next
Cells(1, 1).Select
While ActiveCell.Value = "" Or ActiveCell.Value = "Cliente"
    ActiveCell.Offset(1, 0).Select
Wend
'Vuelvo a la Hoja1
ActiveWorkbook.Sheets(1).Activate
Cells(1, 1).Select
'el control se hará sobre la columna A, a partir de la fila
    While ActiveCell.Value = "" Or ActiveCell.Value = "Cliente"
        ActiveCell.Offset(1, 0).Select
        'si la celda contiene datos, pasa a la fila siguiente
    Wend
'filalibre = ActiveCell.Row
'guarda en la variable filalibre el número de la primer fila sin datos.
'A partir de aquí comparo entre hojas
'
'?
'
End Sub

El código adjunto muestra la comparativa entre columnas de "Hoja1"y quiero hacer lo mismo pero entre hojas distintas.

Y la verdad que cuanto más lo toco menos funciona.

¿Me podéis ayudar?

El archivo es las practicas para luego aplicarlo al archivo verdadero una vez tenga claro los conceptos.

En Excel tengo

1 Respuesta

Respuesta
1

H o l a:

Mejor explícame con los ejemplos que pusiste en la imagen.

  • Cuál hoja es la que tiene los datos
  • Cuál hoja es la que quieres actualizar
  • Qué tienes en la hoja destino
  • Y qué es lo que esperas de resultado.
  • H o l a:

Mejor explícame con los ejemplos que pusiste en la imagen.

  • Cuál hoja es la que tiene los datos

Hoja1. 

  • Cuál hoja es la que quieres actualizar

Hoja2

  • Qué tienes en la hoja destino

Los mismos datos en rango A y diferentes, en rango B

  • Y qué es lo que esperas de resultado.

Correr A hasta encontrar celda con datos (numeros) en hoja1 = primera celda encontrada

Correr A hasta encontrar celda con datos (numeros )en hoja2 = primera celda encontrada

    Si primera celda encontrada hoja1 = primera celda encontrada hoja2

        Si primera celda encontrada hoja1.offset(0,1) = primera celda encontrada hoja2.offset(0,1)

            pintar verde primera celda encontrada hoja2.offset(0,1)

        Si no

            pintar rojo primera celda encontrada hoja2.offset(0,1)

    Si no

       Siguiente fila hasta última fila con datos (numeros) y establecer activa primera celda encontrada hoja2   

Hoja1 y Hoja2 tienen que quedar con filas en blanco y ceros, ocultos, después del bucle

Fin

Muchas gracias por la ayuda.

De momento quiero hacer esto porque luego, teniendo claro como se hace, tengo que añadirle más bucles y condiciones.

H o l a:

Pero necesito la explicación con ejemplos.

En tu imagen, en la hoja1, en la celda A5 tienes al cliente 1, ¿este número 1 lo busco en la celda A5 de la hoja2 o lo busco en todas las celdas de la columna A de la hoja2?

Si tienes dificultades para realizar la explicación con ejemplos, envíame tu archivo con datos reales. En la hoja1 y hoja2 me pones la información actual, en las hojas 3 y 4 me pones el resultado esperado, es decir, en la hoja 3 pones cómo quieres la hoja1; y en la hoja 4 pones cómo quieres la hoja2.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “César Mejías Narciso” y el título de esta pregunta.

Sal u dos

Gracias Dante,

Ya te he enviado el archivo y una explicación por correo.

Disculpa, porque me he olvidado en asunto el título de la pregunta...

Te anexo la macro actualizada

Sub ComparaValores()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    h1.Cells.EntireRow.Hidden = False
    h2.Cells.EntireRow.Hidden = False
    '
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "A") = 0 Or h1.Cells(i, "A") = "" Or h1.Cells(i, "A") = " " Then
            h1.Rows(i).EntireRow.Hidden = True
            h2.Rows(i).EntireRow.Hidden = True
        End If
        If h1.Cells(i, "A") = h2.Cells(i, "A") And h1.Cells(i, "B") = h2.Cells(i, "B") Then
            h2.Cells(i, "B").Font.Color = RGB(0, 150, 0)
        Else
            h2.Cells(i, "B").Font.Color = RGB(255, 0, 0)
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas