Macro Sumar valores con condiciones

Buenas noches, les planteo mi situación.
Tengo 2 hojas en el mismo libro:
La 1º (ventas) contiene código (columna A) descripción (columna B) cantidad precio kg... De productos
La 2º (diario) contiene solo el código (columna A), la descripción(columna B) y total (columna C)
En la hoja ventas se puede repetir varias filas con datos de un mismo producto.
Quisiera que me ayudaran con una macro que primero compare los códigos de la hoja "Ventas" con los códigos de la hoja "Diario" si coinciden que sume la cantidad de dicha fila de la hoja "Ventas" con el valor actual que hay en total de dicho producto en "Diario", y si no coinciden los códigos de ese registro o fila se coloque al final de todos los registros dejando una fila en blanco, en la hoja "Ventas".
Desde ya, agradezco por el tiempo que se puedan tomar en ayudarme.

1 Respuesta

Respuesta
1
No sé si lo he entendido bien. Supongo que será esto lo que quieres:
Option Explicit
Sub totalizarDatosVenta()
    Dim codA As String
    Dim nLin As Long
    Dim i As Long
    Dim nLinFinDiario As Long
    ' Leemos las líneas de la página de ventas
    nLin = 0
    Do
        nLin = nLin + 1
        ' Leemos el código de la columna 1
        codA = Sheets("Ventas").Cells(nLin, 1)
        If codA = "" Then Exit Do   ' Si está en blanco... no hay más
        ' Buscamos la última línea del diario
        nLinFinDiario = miraUltimaLineaDiario()
        ' Buscamos el código de la columna A en el diario
        For i = 1 To nLinFinDiario
            If UCase$(Sheets("Diario").Cells(i, 1)) = UCase$(codA) Then Exit For
        Next i
        If i <= nLinFinDiario Then
            ' Ya existe. Sumamos las unidades
            Sheets("Diario").Cells(i, 3) = Sheets("Diario").Cells(i, 3) + Sheets("Ventas").Cells(nLin, 3)
          Else
            ' Es nuevo. Lo añadimos al final del diario
            Sheets("Diario").Cells(i, 1) = Sheets("Ventas").Cells(nLin, 1)
            Sheets("Diario").Cells(i, 2) = Sheets("Ventas").Cells(nLin, 2)
            Sheets("Diario").Cells(i, 3) = Sheets("Ventas").Cells(nLin, 3)
        End If
    Loop
    MsgBox "Proceso terminado"
End Sub
Private Function miraUltimaLineaDiario() As Long
    Dim i As Long
    i = 1
    Do While Sheets("Diario").Cells(i, 1) <> ""
        i = i + 1
    Loop
    miraUltimaLineaDiario = i - 1
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas