Macro Excel Opciones de filtrado y "loop"

Es mi primera vez por aquí, he resuelto muchas de mis dudas gracias a vosotros y hoy por fin me he decidido a realizar mi propia consulta, me gustaría saber si es posible realizar una macro en la cual en primer lugar filtre por una "CLAVE" a partir de ahí recoja la información filtrada, y la copie en un libro aparte.

Bien, hasta aquí he encontrado como hacerlo, pero el tema está en que hay unas 12 "CLAVES" más que filtrar, me gustaría saber como poder juntar las 12 variables de claves en la misma macro y que haga lo mismo de una sola vez, es decir una vez haya terminado con la CLAVE"1", comience con la "CLAVE2", una vez haya terminado con la "CLAVE2, comience con la "CLAVE3", y así sucesivamente copiando los datos de esa línea en las que aparecen las palabras clave, y que a su vez, una vez finalizada la macro, no se repitan, en resumen, coger 12 claves diferentes de una base de datos, aplicarlas un filtro y que por cada filtro realizado, se guarde en un excel aparte con el nombre de esa clave en una sola macro.

¿Es esto posible?

Respuesta
1

[Hola

¿De dónde salen tus 12 claves? ¿De un rango en especial? ¿De alguna celda de distintas hojas en la cual la celda repite su dirección? ¿Las ingresas de algún modo?

Abraham Valencia

Hola Abraham, te comento:

Las celdas salen de una base de datos entera en la cual el filtro principal digamos tenemos como filtro "CLAVES" justo de bajo habrá un registro de unas 4000 claves del tipo : PLAN, TIE,DUR.( abreviaturas sin sentido) 

A partir de aquí debo y hasta el final de la hoja , no sabría decirte exacto el rango por que puede ir variando a medida que vuelquen mas datos en la base de datos.

Es posible que la variable de alguna clave , se repita en alguna hoja , de momento no es el caso, pero me gustaría saber si aun repitiéndose en hojas diferentes se podría realizar, en todo caso , le pasaría la macro en la siguiente hoja y haría la misma operación, o estoy equivocado?

Muchas gracias por tu atención y rápida respuesta

Creo que no me entendiste, me refería a qué de dónde salen eso valores, de dónde los obtienes ¿en dónde están?

Abraham Valencia

En un excel , vienen de un excel todos los datos

Hummm, mejor coloca tu archivo en algún "Drive" (Google Drive, OneDrive, DropBox, etc.) y comparte el enlace por aquí. Si tienes información que consideras privada, elimínala, lo que se necesita es ver la disposición de tus datos. No olvides indicar cuáles son las hojas a filtrar y de dónde salen lo que tú llamas "claves".

Abraham Valencia

1 respuesta más de otro experto

Respuesta
1

Más o menos entiendo lo que quieres hacer sube un ejemplo vía pantallazo, esto que quieres se logra con un for en vez de un loop un do while loop es muy lento y obsoleto para VBA se usa cuando estas aprendiendo luego se descarta, y dentro del ciclo for se copia los resultados del filtro mediante una instrucción especial de excel para copiar celdas visibles y explica a mayor detalle que quieres hacer.

Hola de nuevo , adjunto esta imagen a modo de explicación;

Por ejemplo , al ejecutar  la macro , me gustaría que cogiese en el campo categoría todo lo que aparece con el filtro de software, y a continuación me lo abriese en un excel nuevo al que llamaría software, a continuación que hiciese la misma operación con el campo fotografía y después con el de libros. Todo ello dentro de la misma macro.

A su vez , me gustaría consultar si sería posible realizar esta misma operación , pero en vez de copiando todo , simplemente copiando un campo , es decir , escogería software para el filtrado, y solo querria que me filtrase la id de producto por ejemplo en su pertinente excel aparte.

y que al finalizar,

Si volviese a ejecutar la macro no repitiese datos repetidos en los excel ya creados.

Una vez mas , gracias por vuestra atención , ayuda y rápidas respuestas.

Un saludo

Prueba esta macro, la lectura de datos comienza en la celda A1, cambia esta celda si tus datos comienzan en una celda diferente, en cada libro te pondrá solo los productos relacionados con esa categoría

Sub GENERAR_LIBROS()
Application.DisplayAlerts = False
LIBRO = ActiveWorkbook.Name
Set PRODUCTOS = Range("A1").CurrentRegion
With PRODUCTOS
    FILAS = .Rows.Count
    COL = .Columns.Count
    .Sort Key1:=Range(.Columns(3).Address), ORDER1:=xlAscending, Header:=True
    Set UNICOS = .Columns(COL + 3).Resize(FILAS, 1)
End With
With UNICOS
    PRODUCTOS.Columns(3).Copy: UNICOS.PasteSpecial
    .RemoveDuplicates Columns:=1
    Set UNICOS = .CurrentRegion
    FILAS = .Rows.Count
    For I = 2 To FILAS
        CATEGORIA = .Cells(I, 1)
        CUENTA = WorksheetFunction.CountIf(PRODUCTOS.Columns(3), CATEGORIA)
        INDICE = WorksheetFunction.Match(CATEGORIA, PRODUCTOS.Columns(3), 0)
        PRODUCTOS.Rows(INDICE).Resize(CUENTA, 4).Copy
        Workbooks.Add
        Range("A2").Resize(CUENTA, 4).PasteSpecial
        ActiveWorkbook.SaveAs Filename:="C:\archivos excell\" & CATEGORIA & ".xlsx"
        LIBRO2 = ActiveWorkbook.Name
        Workbooks(LIBRO).Activate
        PRODUCTOS.Rows(1).Copy
        Workbooks(LIBRO2).Activate
        Range("A1").Resize(1, 4).PasteSpecial
        ActiveWorkbook.SaveAs Filename:="C:\archivos excell\" & CATEGORIA & ".xlsx"
    Next I
End With
Set PRODUCTOS = Nothing: Set UNICOS = Nothing
Application.DisplayAlerts = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas