Como dividir un libro en varios a cada 5000 registros

Tengo un archivo con más de 100,000 registros; y quiero dividirlos de 5,000 en 5,000. Pero creando un archivo para cada uno.

Por tu interés recibe un cordial saludo

1 respuesta

Respuesta
1

¿Qué se puede suponer?...
- Que tienes el libro abierto en la hoja donde están los datos y que en ese mismo libro pondrás la macro.
¿Qué información no se puede suponer?...
- La fila de encabezados de tus datos: ¿Dónde están? (Por ejemplo: A1:G1).
- Si respondes bien a lo anterior, uno ya deduce cuantas COLUMNAS de datos tiene tu rango.
- Los datos a copiar: ¿Son fijos o se incluyen fórmulas? Y si incluyen fórmulas: ¿Quieres qué en lo copiado se quiten esas fórmulas quedando -solo- los valores?
- El nombre de los archivos a guardar: ¿Qué pensaste sobre esto?
- Y la carpeta donde guardar los nuevos libros: ¿Cuál es? ¿Qué relación tiene con la carpeta donde se halla el libro en el que residirá la macro?
Como verás: "hay más" entre lo que no has descrito que entre lo que sí.

El encabezado A1:R1.

Los datos son fijos, sólo una columna tiene formato de fecha. Quiero incluir fórmulas pero no sé si se puedan mantener.

El nombre de los archivos...pues...de 0001 a 5000, 5001 a 10000, etc.

Sí, que sea la misma donde está la macro. Gracias, por las vacaciones dejé de abrir mi correo, perdón.

- "... Quiero incluir fórmulas pero no sé si se puedan mantener ..."

Y... ¡Depende de la fórmula!


O sea: para datos fijos (numéricos, textos o fechas) lo que pides es sencillo e inmediato. Mientras que si tienes fórmulas: ¡Hay que verlas! (Imagina que una fórmula dependa de un dato de otra hoja, por ejemplo).
Analízalo y me comentas, ¿Ok?

Bien, que quede sin fórmulas. De antemano agradecido.

Podrías intentar con:

Sub Partición_en_Libro()
Dim ws As Worksheet, LR&, i&, Txt$
Const qRow As Integer = 5000, qCol As Integer = 18
Application.ScreenUpdating = False
Set ws = ActiveSheet
LR = ws.Cells(Rows.Count, "a").End(xlUp).Row
Workbooks.Add xlWBATWorksheet
Columns.ColumnWidth = 1.32
With ws.[a1].Resize(, qCol)
  .Offset(1).Copy: Range(.Address).EntireColumn.PasteSpecial xlPasteFormats
  .Copy [a1]: [a1].Select
End With
For i = 2 To LR Step qRow
  Txt = Format(i - 1, "0000") & "-" & Format(i + qRow - 2, "0000")
  Application.StatusBar = "--> " & Txt
  ActiveSheet.Name = Txt
  [a2].Resize(qRow, qCol) = ws.Cells(i, "a").Resize(qRow, qCol).Value
  [a1].CurrentRegion.Columns.AutoFit
  Txt = ThisWorkbook.Path & "\" & Txt & ".xlsx"
  If Dir(Txt) <> "" Then Kill Txt
  ActiveWorkbook.SaveAs Txt, FileFormat:=xlOpenXMLWorkbook
Next
ActiveWorkbook.Close False
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

¿Te va?...

¡Gracias! Abusando de tu amabilidad...¿pudieras darme una pequeña explicación de como trabaja la rutina Partición_en_libro?

Como dijera Pipo ¡Fantástico!

Algo así:
- Definidas la cantidad de filas por archivo (qRow) y de columnas a tratar (qCol), la macro crea un libro nuevo mediante: Workbooks. Add xlWBATWorksheet.
- A ese libro/hoja nuevos le copia la fila de encabezados (.Copy [a1]) así como el formato de las celdas que se toma de la segunda fila de datos (. Offset(1). Copy: Range(. Address). EntireColumn. PasteSpecial xlPasteFormats).

- El proceso iterativo, entonces: define el nombre de la hoja/archivo (Txt), copia 5000 filas ([a2].Resize(qRow, qCol) = ws.Cells(i, "a").Resize(qRow, qCol).Value) y guarda el archivo (ActiveWorkbook.SaveAs Txt, FileFormat:=xlOpenXMLWorkbook).
- Las siguientes 5000 filas de datos se "sobre-escriben" encima de las previas y el proceso se repite hasta terminar.
¡Me alegra que te haya sido de utilidad!

¡Gracias! Con esto finiquito mi pregunta...¡hasta la próxima!

Perdón, pero la estaba probando, y descubrí que si le aumento de 5000 a 40000, se detiene la macro porque me dice: Error de compilación. Desbordamiento. ¿Por qué pasa esto?

Te vendrá bien estudiar -más que mucho- la info del siguiente enlace: Variables y operadores.
En particular, lo que preguntas, lo verás en la página 6 del pdf.

¡Gracias! Leí el tutorial, y ya le cambié el tipo de datos. Hasta hoy te comento que he modificado con éxito el proceso. Cierro consulta profundamente agradecido Mario R.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas