Macro para Copiar y Filtrar valores de una Hoja a Otra

Tengo la siguiente planilla en la "Hoja 1":

Y quisiera que ingresando en la "Hoja 2" en la celda B1 por ejemplo "Prod 1" me filtre los insumos que tienen valor distinto de cero.

Es decir que me filtre todos los valores del código de la columna seleccionada que sean mayores a cero. Y que también me deje los nombres de los insumos.

1 Respuesta

Respuesta
1

Entiendo que siempre solicitarás el criterio en B1.

Imaginé una tabla donde puede haber más de 2 col como lo muestra la imagen.

La siguiente macro te devolverá los datos no vacíos en Hoja2 según lo que solicites en B1.

Sub filtroEspecial()
'x Elsamatilde
'se ejecuta desde la hoja 2
Sheets("Hoja2").Select
'si B1 está vacía no ejecuta
If [B1] = "" Then Exit Sub
'busca la col del criterio en B1
crit = [B1]
Sheets("Hoja1").Select
For x = 2 To Range("B1").End(xlToRight).Column
    If Cells(1, x) = crit Then esta = 1: Exit For
Next
If esta = 0 Then
    MsgBox "No se encontró columna con el criterio buscado", , "ERROR"
    Exit Sub
End If
'Se filtra hoja1 por la col del criterio
'última fila con datos
    filx = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("$A$1:$D$" & filx).AutoFilter Field:=x, Criteria1:="<>"
    'se copian las col de 'insumos' y la del crit a hoja2
    Range("A2:A" & filx).Copy Destination:=Sheets("Hoja2").Range("A2")
    Range(Cells(2, x), Cells(filx, x)).Copy Destination:=Sheets("Hoja2").Range("B2")
'quita filtros
Cells(1, x).AutoFilter
End Sub

Solo ajusta el nombre de tus hojas y el rango de col en la instrucción del Autofilter, en mi ejemplo va de A:D

Si el tema resuelve tu consulta no olvides valorarla. Sino solicita aclaraciones.

Muchas gracias Elsa.!!

Lo que me pasaste me es de gran ayuda.

Te hago una sola consulta mas: Como puedo hacer para que si dejo la celda B1 en blanco me borre todos los datos.

Nuevamente gracias!!

Para el ejemplo de tu imagen alcanza con limpiar las 2 col sin hacer distinción de filas. Deja las líneas en negrita en lugar de las originales, el resto sigue igual.

Sub filtroEspecial()
'x Elsamatilde

'se ejecuta desde la hoja 2
Sheets("Hoja2").Select
'si B1 está vacía limpia las 2 col
If [B1] = "" Then Columns("A:B") = "": Exit Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas