una que pego pegar para otra macro hoja filas especificas datos cumplen copiar condiciones condicion con columnas celdas buscar automaticamente anterior abajo excel vba excel-vba copy excel-2010

excel - para - macro copiar y pegar abajo de lo que ya pego anterior



VBA Copie y pegue en otra hoja de AutoFilter sacando una fila (3)

Tengo un AutoFilter que una vez que se aplica, siempre genera una row . Quiero copy esta row y paste en otra Sheet .

He considerado:

  • xlCellTypeAllValidation pero arroja un error
  • xlCellTypeSameValidation hay muchos criterios de validación un AutoFilter
  • xlCellTypeLastCell pero da la ubicación de la última cell en la row filtrada

¿Cómo puedo hacer esto?

Aquí hay un extracto de mi code :

With ThisWorkbook.Sheets(k).Range("A1:AZ1") .Value = .Value .AutoFilter field:=1, Criteria1:=Rev_1 .AutoFilter field:=11, Criteria1:=Beginnings(k) .AutoFilter field:=12, Criteria1:=End_Instnts(k) For zz = 13 To last_Field .AutoFilter field:=zz, Criteria1:="" Next zz .SpecialCells(xlCellTypeLastCell).Select .Range.Select ThisWorkbook.Sheets(k).AutoFilterMode = False End With


Puede seleccionar toda la región filtrada y luego copiarla, copiará las filas visibles solo de todos modos. O combínelo con .SpeciallCells (xlCellTypeVisible)

Smthng like (después de finalizar con) (asumiendo que los datos comiencen desde la fila 2)

Range("A2:AZ1").Copy Destination:=PasteRange


Recomiendo probar para asegurarse de que algo coincida con los criterios antes de copiar, algo así como:

With ThisWorkbook.Sheets(k).Range("A1").CurrentRegion.Resize(, 52) .Value = .Value .AutoFilter field:=1, Criteria1:=Rev_1 .AutoFilter field:=11, Criteria1:=Beginnings(k) .AutoFilter field:=12, Criteria1:=End_Instnts(k) For zz = 13 To last_Field .AutoFilter field:=zz, Criteria1:="" Next zz '' make sure there are results matching filter If .Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then '' offset and resize to avoid headers then copy .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("other sheet").Range("A1") End If ThisWorkbook.Sheets(k).AutoFilterMode = False End With


Un enfoque es utilizar células especiales que se dirijan solo a las células visibles. Una variante realmente rápida e indolora es usar offset.

Vea lo siguiente:

Sub CopyFilterResult() Dim WS1 As Worksheet, WS2 As Worksheet With ThisWorkbook Set WS1 = .Sheets("Sheet1") Set WS2 = .Sheets("Sheet2") End With ''Apply your filters here. WS1.UsedRange.Offset(1, 0).Copy WS2.Range("A1") End Sub

Capturas de pantalla:

Fuente (con filtro):

Resultado:

Algo para mantener como una alternativa.

Haznos saber si esto te ayudó.

EDITAR:

Este código es como intercambio en comentarios. Lea los comentarios y modifíquelos según sus necesidades.

Sub CopyAfterFilterMk2() Dim WS1 As Worksheet, WS2 As Worksheet Dim RngBeforeFilter As Range, RngAfterFilter As Range Dim LCol As Long, LRow As Long With ThisWorkbook Set WS1 = .Sheets("Sheet1") Set WS2 = .Sheets("Sheet2") End With With WS1 ''Make sure no other filters are active. .AutoFilterMode = False ''Get the correct boundaries. LRow = .Range("A" & .Rows.Count).End(xlUp).Row LCol = .Range("A1").End(xlToRight).Column ''Set the range to filter. Set RngBeforeFilter = .Range(.Cells(1, 1), .Cells(LRow, LCol)) RngBeforeFilter.Rows(1).AutoFilter Field:=1, Criteria1:="o" ''Set the new range, but use visible cells only. Set RngAfterFilter = .Range(.Cells(2, 1), .Cells(LRow, LCol)).SpecialCells(xlCellTypeVisible) ''Copy the visible cells from the new range. RngAfterFilter.Copy WS2.Range("A1") ''Turn off the filter. .AutoFilterMode = False End With End Sub

Este código también maneja múltiples filas después del filtro.

Haznos saber si esto te ayudó.