Necesitas Crear Un Archivo Por Cada Clave

Necesitas dividir la información de tu hoja en varios archivos en función de las claves que tienes en una columna.

Para cada grupo de claves DEBES generar un archivo con la información correspondiente.

Te muestro cómo generar todos los archivos con solamente presionar un botón.






Código:


Sub Crear_Archivos()
'Por Dante Amor
  'VARIABLES
  Dim wb As Workbook
  Dim sh As Worksheet
  Dim c As Range, celda As Range, col As Range
  Dim wPath As String, col_clave As String
  Dim lr As Long, lc As Long, fila As Long
  Dim ky As Variant
  '
  '
  'DATOS INICIALES
  Set sh = ActiveSheet                    'Nombre de la hoja con los datos
  
  On Error Resume Next
    With Application
      Set celda = .InputBox("Selecciona la primera celda de tus encabezados", _
        "CURSO DE EXCEL Y MACROS", Range("A1").Address, Type:=8)
      If celda Is Nothing Then Exit Sub
      Set col = .InputBox("Selecciona la columna con las claves", _
        "CURSO DE EXCEL Y MACROS", Range("B:B").Address, Type:=8)
      If col Is Nothing Then Exit Sub
    End With
  On Error GoTo 0
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Selecciona la carpeta destino"
    .InitialFileName = ThisWorkbook.Path
    If .Show <> -1 Then Exit Sub
    wPath = .SelectedItems(1) & "\"
  End With
  
  col_clave = Split(col.Address(0, 0), ":")(0) 'Columna clave referencia para crear libros
  
  'AMBIENTE
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '
  'VALORES
  If sh.AutoFilterMode Then sh.AutoFilterMode = False
  fila = celda.Row
  lc = sh.Cells(fila, Columns.Count).End(1).Column
  lr = sh.Range(col_clave & Rows.Count).End(3).Row
  '
  'PROCESO
  With CreateObject("Scripting.Dictionary")
    'almacena en un índice los valores únicos de la columna clave
    For Each c In sh.Range(sh.Cells(fila + 1, col_clave), _
                           sh.Cells(lr, col_clave))
      .Item(c.Value) = Empty
    Next
    For Each ky In .Keys
      'filtra los datos por cada clave
      sh.Range(celda, sh.Cells(fila, lc)).AutoFilter Columns(col_clave).Column, ky
      Set wb = Workbooks.Add(xlWBATWorksheet)       'crea nuevo libro con una hoja
      sh.AutoFilter.Range.Copy Range(celda.Address) 'copia los datos filtrados
      wb.SaveAs wPath & ky & ".xlsx", xlOpenXMLWorkbook                       'guarda el archivo
      wb.Close False
    Next
    sh.ShowAllData
  End With
  '
  'AMBIENTE
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
  MsgBox "Archivos generados", vbInformation, "CURSOS DE EXCEL Y MACROS"
End Sub


Instrucciones:

Realiza los siguientes pasos para crear 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. Copia el código que está arriba.
5. En el panel del lado derecho pega la macro
6. Ahora para crear un botón, puedes hacer lo siguiente:
7. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
8. Elige una imagen y con el Mouse, dentro de tu hoja, presiona clic y arrastra el Mouse para hacer grande la imagen.
9. Presiona clic derecho dentro de la imagen y selecciona: Asignar macro. Selecciona:  Crear_Archivos
10. Presiona Aceptar.
12. Para ejecutarla presiona clic en la imagen.

No hay comentarios.:

Publicar un comentario