Separar base de datos en hojas según criterio

Necesito de su ayuda por favor, tengo una base de datos muy grande, en ella en la columna "J" tengo un listado de variables que necesito separar en hojas separadas, o sea, que mi base de datos que esta en la hoja 1 necesito separarla en hojas distintas agrupando la variable de la columna "J".

1 respuesta

Respuesta
1

Puedes comentarme lo siguiente:

1. Las hojas destino ya existen, ¿si ya existen cómo se llaman?

2. Si no existen las hojas, ¿la macro debe crear cada hoja?

3. Si la macro debe crear la hoja, ¿qué nombre debe ponerle a cada hoja?

4. ¿En qué fila empiezan los datos?

5. ¿En qué fila tienes los encabezados?

Envíame tus comentarios en ese orden.

Hola, si claro:

1- No existen, solo la hoja 1 donde se encuentra la base de datos

2- Si, seria mi deseable, que se creen las hojas por medio de la macro

3- El nombre de la hoja debería ser el mismo de la variable que necesito separar

4- Los datos empiezan en la fila A2

5- Los encabezados inician en la fila A1

Adicionalmente te comento que la variable que necesito separar en hojas se encuentra en la Columna J (es un nombre y un apellido)

Muchas gracias!

Te anexo la macro.

Antes de ejecutar la macro, crea una hoja llamada "temp".

En la macro cambia "Hoja1" por el nombre de la hoja que contiene tu base de datos.

Sub Separar_Datos()
'---
'   Por.Dante Amor
'---
    '
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")        'Hoja con la base de datos
    Set h2 = Sheets("temp")         'Hoja temporal
    h2.Cells.Clear
    u1 = h1.Range("J" & Rows.Count).End(xlUp).Row
    uc = h1.Cells(1, Columns.Count).End(xlToLeft).Column
    h1.Range("J1:J" & u1).Copy h2.Range("A1")
    h2.Range("A1:A" & u1).RemoveDuplicates Columns:=1, Header:=xlYes
    rango = Range(Cells(1, "A"), Cells(u1, uc)).Address
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        If h1.AutoFilterMode Then h1.AutoFilterMode = False
        hoja = Left(h2.Cells(i, "A"), 30)
        h1.Range(rango).AutoFilter Field:=10, Criteria1:=hoja
        existe = False
        For Each h In Sheets
            If LCase(h.Name) = LCase(hoja) Then
                existe = True
                Exit For
            End If
        Next
        If existe Then
            Set h3 = Sheets(hoja)
            h3.Cells.Clear
        Else
            Sheets.Add after:=Sheets(Sheets.Count)
            Set h3 = ActiveSheet
            h3.Name = hoja
        End If
        uf = h1.Range("J" & Rows.Count).End(xlUp).Row
        h1.Range(h1.Cells(1, "A"), h1.Cells(uf, uc)).Copy h3.Range("A1")
    Next
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Application.ScreenUpdating = True
    MsgBox "Separación Terminada", vbInformation, "SEPARAR BASE DE DATOS"
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Separar_Datos
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Sos un genio, ha trabajado de las mil maravillas, justo lo que necesitaba, te lo agradezco muchísimo me ahorraste mucho tiempo que puedo aprovechar automatizando más tablas, gracias de verdad!

¡Saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas