Concatenar valores de celdas a partir de la aplicación de dos filtros

Actualmente tengo un problema con una macro, luego de aplicar dos filtros y obtener los valores deseados, no se como realizar un concatenado de esas celdas visibles. Actualmente lo hago de la siguiente manera, pero no creo que sea la manera más correcta.

    Sheets("General").Activate _    Fila_Final = Range("A" & Cells.Rows.Count).End(xlUp).Row _    ActiveSheet.Range("A1").AutoFilter Field:=8, Criteria1:="RESIDENCIAL" _    ActiveSheet.Range("A1").AutoFilter Field:=12, Criteria1:="=" _    Range("L1").Activate _'se busca la primera celda vacía en la columna L, y concateno _ en la columna O "PRINT" _        Do While Not IsEmpty(ActiveCell) _            ActiveCell.Offset(1, 0).Activate _        Loop _    ActiveCell.Offset(0, 3).FormulaR1C1 = _"=CONCATENATE(RC[-14],"", "",RC[-13],"", "",RC[-12],"" "",RC[-11])" _'se busca la primera celda llena en la columna O "PRINT" _    Range("O2").Activate _        Do While IsEmpty(ActiveCell) _            ActiveCell.Offset(1, 0).Activate _        Loop _    ActiveCell.Activate _'copio y pego la formula para concatenar las celdas que me interesan _    ActiveCell.Copy _    ActiveSheet.Range("O2:O" & Fila_Final).Select _    ActiveSheet. Paste _

Luego de todo eso hago otros procedimientos, copiando ese concatenado en otra hoja del libro, y debo regresarme a esa misma hoja y borrar dicho concatenado, porque no me interesa tenerlo allí.

1 respuesta

Respuesta
1

Esta puede ser otra forma:

Sub concatenar()
'Por.Dante Amor
    Sheets("General").Activate
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        If Cells(i, "H") = "RESIDENCIAL" And Cells(i, "L") = "" Then
            Cells(i, "O") = Cells(i, "A") & ", " & Cells(i, "B") & ", " & Cells(i, "C") & ", " & Cells(i, "D")
        End If
    Next
End Sub

Saludos.Dante Amor

En efecto funciona, pero el procedimiento tarda mucho en completarse. Tengo 792 filas en total, con 154 a hacerles el concatenado... la otra manera es menos inteligente de hacerlo, pero mucho más rápida. ¿Alguna sugerencia?

Prueba con esta macro:

Sub concatenar()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Sheets("General").Activate
    ActiveSheet.Range("A1").AutoFilter Field:=8, Criteria1:="RESIDENCIAL"
    ActiveSheet.Range("A1").AutoFilter Field:=12, Criteria1:="="
    u = Range("A" & Rows.Count).End(xlUp).Row
    If u = 1 Then Exit Sub
    '
    For Each c In Range("H2:H" & u).SpecialCells(xlCellTypeVisible)
        i = c.Row
        Cells(i, "O") = Cells(i, "A") & ", " & Cells(i, "B") & ", " & Cells(i, "C") & ", " & Cells(i, "D")
    Next
End Sub

En todas las macros agrega esta instrucción al principio:

    Application.ScreenUpdating = False

Prueba con todas las macros y revisa cuál es más rápida.

Hice pruebas con 30 mil registros. Mi segunda macro tiene problemas, tu macro concatena todas las filas.

La única macro que lo hace bien con 30 mil es esta macro.

Con la instrucción Application.ScreenUpdating = False, con mil registros el resultado es inmediato.

Sub concatenar()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Sheets("General").Activate
    Columns("O").Clear
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        If Cells(i, "H") = "RESIDENCIAL" And Cells(i, "L") = "" Then
            Cells(i, "O") = Cells(i, "A") & ", " & Cells(i, "B") & ", " & Cells(i, "C") & ", " & Cells(i, "D")
        End If
    Next
    If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
End Sub

Saludos.Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas