Macro para extraer datos de una hoja Excel.

Me gustaría saber si es posible hacer una macro que pida una serie de valores de cada columna y extraiga esas filas solamente, os explico:

En mi hoja Excel tengo 6 columnas y me gustaría tener una macri que me preguntara por el texto a filtrar de la columna uno que es el pais, que luego me pregunté por el texto de la segunda columna que es la ciudad.

Me gustaría que para introducir los datos me preguntaran con cuadros de diálogo y que después la selección me la copiara en otra pestaña.

No sé si me he explicado bien, pero si podéis darme alguna indicación os lo agradeceré.

1 respuesta

Respuesta
2

Te sugiero utilices un pequeño formulario para la selección de los criterios.

'...Que me preguntara por el texto a filtrar ... sería con el uso de cuadros InputBox... pero eso es poco confiable considerando que se puede tipear con error.

Si esta opción te puede resultar de utilidad entonces confirma para continuar con la macro.

Aclara además: si la hoja destino ya tiene datos, si en ese caso hay que borrarlos o copiar lo filtrado a continuación.

Además deja una imagen de los encabezados de tu hoja de datos a filtrar para ver su ubicación.

Hola Elsa, muchas gracias por tu respuesta.

Claro que estaría interesado en la opción que me dices, en la segunda pestaña hay datos por lo que tendremos que borrar esa hoja Antea entera siempre.

Muchas gracias por tu ayuda como siempre.

un saludo

Entra al Editor de macros e inserta un Userform. Allí colócale los 6 combobx a los que les asignarás los valores posibles (si necesitas ayuda para esta parte debes dejar otra consulta con este tema puntual).

También agrega un botón (CommandButton1) y allí deja la siguiente rutina:

Private Sub CommandButton1_Click()
'x Elsamatilde
'adaptación de códigos del manual 500Macros, cap 19
'borrar datos de la segunda pestaña
Sheets(2).Clear
'se borran posibles filtros de la hoja activa
If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
'fin de rango según col A en hoja activa
x = Range("A" & Rows.Count).End(xlUp).Row
'aplicar filtros a la hoja activa.
    If ComboBox1 <> "" Then ActiveSheet.Range("$A$1:$F$" & x).AutoFilter Field:=1, Criteria1:=ComboBox1
    If ComboBox2 <> "" Then ActiveSheet.Range("$A$1:$F$" & x).AutoFilter Field:=2, Criteria1:=ComboBox2
    If ComboBox3 <> "" Then ActiveSheet.Range("$A$1:$F$" & x).AutoFilter Field:=3, Criteria1:=ComboBox3
    'repetir para el resto de los filtros
'verificar si hay datos filtrados
y = Range("A" & Rows.Count).End(xlUp).Row
If y > 1 Then
    Range("A1:F" & y).Copy Destination:=Sheets(2).[A1]
End If
'se quitan filtros de hoja origen
If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
End Sub

Estoy asumiendo (a falta de mayores aclaraciones) que la hoja activa presenta títulos en fila 1 y los datos inician en fila 2. También asumo que la col A tendrá datos en todas sus filas, por lo menos hasta la última del rango.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas