¿Cómo puedo hacer una macro que pueda filtrar, copiar y pegar en otras hojas, en base a la data filtrada?

Tengo una base de datos con varias columnas (En un archivo excel y en una hoja), dentro de la base de datos hay una columna dónde se encuentran valores repetidos, el cual me permitirá hacer los filtros, estos filtros estarán en una hoja y rango de celdas, la macro debe realizar el filtro según la cantidad de datos que tengan la hoja dónde se encuentran los valores o condiciones para que realice el filtro, es decir, en la hoja de filtros hay dos valores que por ejemplo serían nombres "Freddy" y el otro "Carlos", en la base de datos tiene varias columnas para el ejemplo para hacerlo sencillo tres y una de ellas es "Nombre" y tiene 3 registros con los nombres Freddy y 2 registros con los nombres Carlos en total 5 registros, la macro debe filtrar primero los de nombre Freddy, copiar los datos filtrados y luego pegarlos en una nueva hoja, esa hoja debe decir el nombre Freddy, luego debe realizar lo mismo con Carlos, pero esto debe hacerse no solo para dos registros sino para varios porque en una BD pueden haber muchos más, lo que mencionó en el anterior ejemplo es muy sencillo para entender lo que estoy buscando hacer, estuve haciéndolo por mi cuenta, pero me esta saliendo errores y debe ser porque no tengo mucha experiencia en programación VB sin embargo la lógica la entiendo.

1 Respuesta

Respuesta
2

Ejecuta la siguiente macro para crear una hoja por cada nombre

Cambia "base" por el nombre de tu hoja con la base de datos y "A" por la columna donde tienes los nombres.

Sub Crea_Hojas()
  Dim c As Range, sh As Worksheet, ky As Variant
  '
  Set sh = Sheets("Base")
  With CreateObject("scripting.dictionary")
    For Each c In sh.Range("A2", sh.Range("A" & Rows.Count).End(xlUp))
      .Item(c.Value) = Empty
    Next c
    For Each ky In .Keys
      sh.Range("A1").AutoFilter 1, ky
      Sheets.Add(, Sheets(Sheets.Count)).Name = ky
      sh.AutoFilter.Range.EntireRow.Copy Range("A1")
    Next ky
  End With
  sh.Select
  sh.ShowAllData
End Sub

¡Gracias! Dante muy bueno, por lo que puedo leer del código y de lo que expliqué anteriormente, quisiera aclarar tal vez con unas imágenes, porque creo que falto aclarar que la columna A como indicas, esa columna A no está en la hoja Base, para aclarar, es que de la Hoja Base sale la columna A pero lo tenemos en una hoja Nueva. Te mando los screenshots.... muchas gracias.

Esta es la BD como ejemplo

Esta es la columna A que tu mencionas pero yo la obtengo con una tabla dinámica...

¿Probaste la macro?

Cambia esto:

Sheets("Base")

Por esto:

Sheets("BD")

La macro te va a crear las hojas F, G, H, I, J, K

Prueba la macro y me comentas.

Hojas creadas en base a la columna A, como veras se tiene en las pestañas siguientes de BD.

La macro no necesita la tabla dinámica. La macro encuentra los nombres únicos.

Te invito a probar la macro. Verás los resultados.

No todavía, sino que leyendo el código pienso que falta una variable tipo sheet que hace referencia a la columna A, en mi caso sería Tabla Dinamica.... voy a probarlo ahora... te comento cómo me fue.

No te preocupes por el código.

Solamente prueba la macro.

Te repito, no necesita la hoja de la tabla dinámica. Solamente actualiza el nombre de la hoja "BD"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas