Copiar información de hojas y concetrar en otra

Para DANTE

Hola dan recientemente me haz ayudado con este código:

Sub Concentrartotal()'Por.Dante Amor  Application.ScreenUpdating = FalseSheets("concentrado1").Activate  Range("E3:E61").Select    ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1Sheets("concentrado2").Activate  Range("E3:E61").Select    ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1    Sheets("concentrado3").Activate  Range("E3:E61").Select    ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1Sheets("concentrado4").Activate  Range("E3:E61").Select    ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1Sheets("concentradototal").Activate  Range("E3:E61").Select    ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1    On Error Resume Next    Sheets("concentradototal").Select    Set h1 = Sheets("concentrado1")    Set h2 = Sheets("concentrado2")    Set h3 = Sheets("concentrado3")    Set h4 = Sheets("concentrado4")    Set h5 = Sheets("concentradototal")      'Range("b4:E61").ClearContents    'h5.Cells.ClearContents      Application.ScreenUpdating = False    h1.[B3:E3].Copy h5.[B3]    For i = 4 To h1.Range("E" & Rows.Count).End(xlUp).Row        h5.Cells(i, "B") = h1.Cells(i, "B") + h2.Cells(i, "B") + h3.Cells(i, "B") + h4.Cells(i, "B")        h5.Cells(i, "C") = h1.Cells(i, "C")        h5.Cells(i, "D") = h1.Cells(i, "D")        h5.Cells(i, "E") = h1.Cells(i, "E") + h2.Cells(i, "E") + h3.Cells(i, "E") + h4.Cells(i, "E")    Next  'Por.Dante Amor      Application.ScreenUpdating = False    For Each c In Range("e4:e60")    Range("b62:e66").ClearContents     Range("D2:E2").ClearContents        If c.Value = "0" Then            c.EntireRow.Hidden = True        End If    Next    For Each c In Range("b4:b60")        Range("b62:e66").ClearContents         Range("D2:E2").ClearContents        If c.Value = "0" Then            c.EntireRow.Hidden = True        End If    Next      Application.ScreenUpdating = False  Range("E3:E61").Select   Selection.AutoFilter   ActiveSheet.Range("$E$3:$E$62").AutoFilter Field:=1, Criteria1:=">0", _        Operator:=xlAnd         Range("b62:e66").ClearContents         Range("D2:E2").ClearContents    Sheets("concentradototal").Unprotect  Application.ScreenUpdating = FalseEnd Sub

el cual he modificado a mi conveniencia...

Lo que resulta ahora es que si solo hay datos en la hoja 4 o solo en la hoja 2 el código de arriba no me funciona..

Entonces si yo pongo datos en la hoja1 entonces si funciona correctamente..

Espero me ayudes a solucionarlo... Gracias!

1 Respuesta

Respuesta
1

Puedes pegar nuevamente el código, pero directamente, ya que aparece todo en una sola línea

Sub Concentrartotal()
'Por.Dante Amor
Application.ScreenUpdating = False

Sheets("concentrado1").Activate
Range("E3:E61").Select
ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1
Sheets("concentrado2").Activate
Range("E3:E61").Select
ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1
Sheets("concentrado3").Activate
Range("E3:E61").Select
ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1
Sheets("concentrado4").Activate
Range("E3:E61").Select
ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1
Sheets("concentradototal").Activate
Range("E3:E61").Select
ActiveSheet.Range("$E$3:$E$63").AutoFilter Field:=1

On Error Resume Next
Sheets("concentradototal").Select
Set h1 = Sheets("concentrado1")
Set h2 = Sheets("concentrado2")
Set h3 = Sheets("concentrado3")
Set h4 = Sheets("concentrado4")
Set h5 = Sheets("concentradototal")
'Range("b4:E61").ClearContents
'h5.Cells.ClearContents
Application.ScreenUpdating = False
h1.[B3:E3].Copy h5.[B3]
For i = 4 To h1.Range("E" & Rows.Count).End(xlUp).Row
h5.Cells(i, "B") = h1.Cells(i, "B") + h2.Cells(i, "B") + h3.Cells(i, "B") + h4.Cells(i, "B")
h5.Cells(i, "C") = h1.Cells(i, "C")
h5.Cells(i, "D") = h1.Cells(i, "D")
h5.Cells(i, "E") = h1.Cells(i, "E") + h2.Cells(i, "E") + h3.Cells(i, "E") + h4.Cells(i, "E")
Next
'Por.Dante Amor
Application.ScreenUpdating = False
For Each c In Range("e4:e60")
Range("b62:e66").ClearContents
Range("D2:E2").ClearContents
If c.Value = "0" Then
c.EntireRow.Hidden = True
End If
Next
For Each c In Range("b4:b60")
Range("b62:e66").ClearContents
Range("D2:E2").ClearContents
If c.Value = "0" Then
c.EntireRow.Hidden = True
End If
Next
Application.ScreenUpdating = False
Range("E3:E61").Select
Selection.AutoFilter
ActiveSheet.Range("$E$3:$E$62").AutoFilter Field:=1, Criteria1:=">0", _
Operator:=xlAnd
Range("b62:e66").ClearContents
Range("D2:E2").ClearContents
Sheets("concentradototal").Unprotect
Application.ScreenUpdating = False
End Sub

Cambia esto:

For i = 4 To h1.Range("E" & Rows.Count).End(xlUp).Row
h5.Cells(i, "B") = h1.Cells(i, "B") + h2.Cells(i, "B") + h3.Cells(i, "B") + h4.Cells(i, "B")
h5.Cells(i, "C") = h1.Cells(i, "C")
h5.Cells(i, "D") = h1.Cells(i, "D")
h5.Cells(i, "E") = h1.Cells(i, "E") + h2.Cells(i, "E") + h3.Cells(i, "E") + h4.Cells(i, "E")
Next

Por esto:

u1 = h1.Range("E" & Rows.Count).End(xlUp).Row
un = u1
Set hn = h1
u2 = h2.Range("E" & Rows.Count).End(xlUp).Row
If u2 > un Then
    un = u2
    Set hn = h2
End If
u3 = h3.Range("E" & Rows.Count).End(xlUp).Row
If u3 > un Then
    un = u3
    Set hn = h3
End If
u4 = h4.Range("E" & Rows.Count).End(xlUp).Row
If u4 > un Then
    un = u4
    Set hn = h4
End If
For i = 4 To un
    h5.Cells(i, "B") = h1.Cells(i, "B") + h2.Cells(i, "B") + h3.Cells(i, "B") + h4.Cells(i, "B")
    h5.Cells(i, "C") = hn.Cells(i, "C")
    h5.Cells(i, "D") = hn.Cells(i, "D")
    h5.Cells(i, "E") = h1.Cells(i, "E") + h2.Cells(i, "E") + h3.Cells(i, "E") + h4.Cells(i, "E")
Next

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas