Corregir funcionamiento de una macro

Tengo una macro que me encontré en la web dicha macro genera un reporte por código, la macro filtra los códigos de la hoja1 columna "A" uno a uno y los pega en la hoja reporte por separado y da un total por código generando un reporte por separado. Esto me funciona perfecto lo que quiero hacer es que en lugar de que me filtre o busque por datos de la columna "A" lo haga como un tipo de concatenado, es decir que existiera una variable de unión de las columnas "A","B","C" y de ahí me arrojara el reporte. Ejemplo:

La columna A esta el código, columna B esta color y columna C descripción la variable de búsqueda concatenaría las tres y tendría por ejemplo: "100000878AzulNailon" esta sería el dato a buscar y de ahí me genere el reporte.

Estas son las columnas de la hoja 1:

Código Color Descripción Cantidad Concepto Factura Orden de salida Dev. Prod. Dev. Proveedor Fecha No.

Este es el código:

Sub reporte()
Application.ScreenUpdating = False
Dim ul As Long
Dim cel As Range
Dim rng As Range
Dim uf As Long, uf1 As Long
uf1 = Cells(Rows.Count, 1).End(xlUp).Row
uf = Cells(Rows.Count, 2).End(xlUp).Row
Set rng = Range("A6:A" & uf1)
Hoja3.Range("A1:K" & uf1).Clear
Hoja3.Cells = ""
Hoja1.Select
ul = 6
For Each cel In rng
contar = WorksheetFunction.CountIf(Range("A6" & ":A" & cel.Row), cel)
If contar = 1 Then
Hoja3.Range("H1") = "Código"
Hoja3.Range("H2") = cel
Range("A5:K" & uf).AdvancedFilter xlFilterCopy, Hoja3.Range("H1:H2"), _
Hoja3.Range("A" & ul), False
ul = Hoja3.Range("A" & Rows.Count).End(xlUp).Row + 1
Hoja3.Range("A" & ul) = "Stock"
Hoja3.Range("A" & ul).font.Bold = True
pr = Hoja3.Range("A" & ul).Offset(-1, 0).End(xlUp).Row 'hoja 3 reporte
suma = Application.WorksheetFunction.SumIf(Hoja3.Range("E" & pr + 1 & ":E" & ul - 1), "Entrada", _
Hoja3.Range("D" & pr + 1 & ":D" & ul - 1)) ' b= cantidad, c= concepto ya sea entrada o salida
resta = Application.WorksheetFunction.SumIf(Hoja3.Range("E" & pr + 1 & ":E" & ul - 1), "Salida", _
Hoja3.Range("D" & pr + 1 & ":D" & ul - 1))
devprod = Application.WorksheetFunction.SumIf(Hoja3.Range("E" & pr + 1 & ":E" & ul - 1), "Dev Prod.", _
Hoja3.Range("D" & pr + 1 & ":D" & ul - 1))
devprov = Application.WorksheetFunction.SumIf(Hoja3.Range("E" & pr + 1 & ":E" & ul - 1), "Dev Prov.", _
Hoja3.Range("D" & pr + 1 & ":D" & ul - 1))
Hoja3.Range("D" & ul) = suma - resta + devprod - devprov
Hoja3.Range("D" & ul).font.Bold = True
Hoja3.Range("D" & ul).Interior.Color = RGB(255, 255, 0)
Hoja3.Range("D" & ul).Borders(xlEdgeTop).LineStyle = xlContinuous
ul = ul + 2
End If
Next
Application.ScreenUpdating = False
End Sub

1 respuesta

Respuesta
2

H   o   l   a  :

Te anexo la macro actualizada

Sub reporte()
    Application.ScreenUpdating = False
    Dim ul As Long
    Dim cel As Range
    Dim rng As Range
    Dim uf As Long
    uf = Cells(Rows.Count, 1).End(xlUp).Row
    Set rng = Range("A6:A" & uf)
    Hoja3.Cells.Clear
    ul = 6
    For Each cel In rng
        contar = WorksheetFunction.CountIfs(Range("A6:A" & cel.Row), cel, _
                                            Range("B6:B" & cel.Row), cel.Offset(0, 1), _
                                            Range("C6:C" & cel.Row), cel.Offset(0, 2))
        If contar = 1 Then
            Hoja3.Range("H1") = Range("A5")
            Hoja3.Range("H2") = cel
            Hoja3.Range("I1") = Range("B5")
            Hoja3.Range("I2") = cel.Offset(0, 1)
            Hoja3.Range("J1") = Range("C5")
            Hoja3.Range("J2") = cel.Offset(0, 2)
            Range("A5:K" & uf).AdvancedFilter xlFilterCopy, Hoja3.Range("H1:J2"), _
                Hoja3.Range("A" & ul), False
            ul = Hoja3.Range("A" & Rows.Count).End(xlUp).Row + 1
            Hoja3.Range("A" & ul) = "Stock"
            Hoja3.Range("A" & ul).Font.Bold = True
            pr = Hoja3.Range("A" & ul).Offset(-1, 0).End(xlUp).Row 'hoja 3 reporte
            suma = Application.WorksheetFunction.SumIf(Hoja3.Range("E" & pr + 1 & ":E" & ul - 1), "Entrada", _
                Hoja3.Range("D" & pr + 1 & ":D" & ul - 1)) ' b= cantidad, c= concepto ya sea entrada o salida
            resta = Application.WorksheetFunction.SumIf(Hoja3.Range("E" & pr + 1 & ":E" & ul - 1), "Salida", _
                Hoja3.Range("D" & pr + 1 & ":D" & ul - 1))
            devprod = Application.WorksheetFunction.SumIf(Hoja3.Range("E" & pr + 1 & ":E" & ul - 1), "Dev Prod.", _
                Hoja3.Range("D" & pr + 1 & ":D" & ul - 1))
            devprov = Application.WorksheetFunction.SumIf(Hoja3.Range("E" & pr + 1 & ":E" & ul - 1), "Dev Prov.", _
                Hoja3.Range("D" & pr + 1 & ":D" & ul - 1))
            Hoja3.Range("D" & ul) = suma - resta + devprod - devprov
            Hoja3.Range("D" & ul).Font.Bold = True
            Hoja3.Range("D" & ul).Interior.Color = RGB(255, 255, 0)
            Hoja3.Range("D" & ul).Borders(xlEdgeTop).LineStyle = xlContinuous
            ul = ul + 2
        End If
    Next
    Application.ScreenUpdating = False
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Justamente lo que estaba buscando, muchísimas  gracias Dante, eres un máster.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

E stimado, r ecuerda valorar las respuestas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas