- Si solamente ordenas la hoja1 por la columna J, tendrás los datos agrupados por tipo, solamente tendrías que copiar las columnas que necesitas a la hoja2.
- Otra duda, qué pasa si copias los registros con tipo = "activo", y el número de registros es más de 50; entonces cuando selecciones los "inactivo", y los pegas en la A50, sobre-escribirán algunos registros de "activos".
- ¿Tu datos de la hoja1 tienen encabezado?
- ¿Al copiar y pegar quieres poner el encabezado en cada agrupación del tipo?
Te anexo la macro, suponiendo lo siguiente, el encabezado está en la fila 1, no vas a copiar el encabezado en cada tipo, y entre cada agrupación de tipo, va a dejar una fila vacía.
Cambian lo siguiente en la macro por tus datos:
Set h1 = Sheets("Hoja 1") 'hoja origen
Set h2 = Sheets("Hoja 2") 'hoja estino
Set h3 = Sheets("temp") 'hoja temporal
fila = 1 'fila de encabezados
Para que funcione la macro, debes crear una hoja y le pones por nombre "temp"
Sub Filtrar_Datos_Por_Condicion()
'
' Por Dante Amor
'
Application.ScreenUpdating = False
Set h1 = Sheets("Hoja 1") 'hoja origen
Set h2 = Sheets("Hoja 2") 'hoja estino
Set h3 = Sheets("temp") 'hoja temporal
fila = 1 'fila de encabezados
'
h1.Rows(fila).Copy h2.Rows(1)
h2.Cells.ClearContents
h3.Cells.ClearContents
If h1.AutoFilterMode Then h1.AutoFilterMode = False
u1 = h1.Range("J" & Rows.Count).End(xlUp).Row
h1.Range("J" & fila & ":J" & u1).Copy h3.Range("A1")
u3 = h3.Range("A" & Rows.Count).End(xlUp).Row
h3.Range("A" & fila & ":A" & u3).RemoveDuplicates Columns:=1, Header:=xlYes
u3 = h3.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To u3
If h1.AutoFilterMode Then h1.AutoFilterMode = False
u1 = h1.Range("J" & Rows.Count).End(xlUp).Row
h1.Range("A" & fila & ":J" & u1).AutoFilter Field:=10, Criteria1:=h3.Cells(i, "A").Value
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 2
h1.Range("C" & fila + 1 & ":F" & u1 & ",H" & fila + 1 & ":H" & u1).Copy
h2.Range("A" & u2).PasteSpecial xlValues
Next
If h1.AutoFilterMode Then h1.AutoFilterMode = False
Range("A1").Select
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "Fin"
End Sub
Nota: La columna C de la hoja1, siempre debe tener datos, si no es así, entonces debes cambiar en la macro en esta línea:
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 2
La letra "A" por la columna que siempre tenga datos, de acuerdo a la siguiente relación:
Si la columna "D" siempre tiene datos, entonces pones una "B".
Si "E", entonces "C"
Si "F", entonces "D"
Si "H", entonces "E"
'.[Sal u dos. Dante Amor. No olvides valorar la respuesta.
'.[Avísame cualquier duda