¿Cómo copiar varios registros de un archivo tabular en excel a varias hojas del mismo libro con vba?

Tengo una hoja con datos tabulados, por ejemplo, en la columna "A" que contiene números de cuenta tiene 10 filas con datos repartidos en 3 diferentes cuentas. La columna "B" y "C" complementan la información.

La cuenta "120" tiene 5 registros, la "78" tiene 1 registros, la "110" tiene 4 registros, y así hasta completar las 100 filas de datos. Un ejemplo sencillo:

120 LUIS PLATA

120 PEDRO ORO

120 MARIO PLATA

120 RAUL COBRE

120 MARÍA PLATA

78 KAREN MADERA

110 ROSARIO ORO

110 ANA PLÁSTICO

110 MANUEL MADERA

110 ALFREDO PLATA

Ok, lo que quiero hacer es trasladar todos los registros de la cuenta "120" a una hoja nueva en el libro que se llame "120", no importando cuántos registros tenga (en este ejemplo, tiene 5, pero mes a mes puede variar), y que luego de que termine con los registros de dicha cuenta, cree una nueva hoja con los datos de la cuenta que le sigue, en este caso, la "78".

Al terminar con la cuenta 78 (que en este caso es un único registro), cree una nueva hoja con la cuenta siguiente, en este caso, la cuenta "110", y a esta hoja le ingrese los datos tabulados de la misma cuenta.

Es esto posible?

Tengo un código anterior, pero lo hice para que tomara los datos de una única fila y los trasladara a una hoja individual. En este caso, los datos que tomaba estaban también tabulares, pero tomaba una única fila. La fila 1 correspondía a la hoja 1, la fila 2 a la hoja 2 y así sucesivamente.

En este nuevo caso, no sé como hacer para que vba diferencie X registros (filas), y que cuando ya no encuentre registros del mismo valor, cree una nueva y siga con las siguientes.

Gracias desde ya.

Saludos,

1 respuesta

Respuesta
1

Te mando una macro, la preparé para que inicien las cuentas a partir de la línea 2, considerando la línea 1 como títulos. Tu hoja de cuentas se debe llamar "Hoja1"

Instrucciones para crear una macro
1. Abre tu hoja 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. Para ejecutarla presiona F5

'********Macro******
Sub creahoja()
' Crea una hoja por cada cuenta
' Por.Dam
'
Dim ufila, ucolu As Long
ufila = ActiveCell.SpecialCells(xlLastCell).Row
ucolu = ActiveCell.SpecialCells(xlLastCell).Column
Columns("A:C").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
valorant = Range("A2").Value
i = 2
ini = i
Do While i < ufila + 1
i = i + 1
Cells(i, 1).Select
valornuevo = Cells(i, 1).Value
If valorant <> valornuevo Then
Worksheets("Hoja1").Select
ActiveSheet.Range(Cells(ini, 1), Cells(i - 1, 3)).Copy
Worksheets.Add
ActiveSheet.Paste
ActiveSheet.Name = valorant
Worksheets("Hoja1").Select
ini = i
valorant = valornuevo
End If
Loop
End Sub
'********Macro******

Saludos. Dam

No olvides cerrar la pregunta

Gracias por contestar.

Fijate que no corre como lo necesito; el código que creaste crea una hoja por cada cuenta que está tabulada, y aunque es similar a lo que quiero, no me funciona. Lo que necesito es que cree una hoja por cada cuenta nueva que encuentre.

Como puse en el ejemplo, hay 10 filas tabuladas con datos, pero al final solo habrán 3 hojas nuevas (porque solo existen 3 cuentas diferentes: 120, 78 y 110).

Quisiera que la macro copiara todas las filas de la cuenta 120 que encuentre (5 en el ejemplo) a una hoja nueva, todas las filas de la cuenta 78 que encuentre (1 en el ejemplo) y todas las filas de la cuenta 110 que encuentre (4 en el ejemplo).

Además de colocarle el nombre de la cuenta a la hoja. No sé si es posible.

Gracias nuevamente.

Eso hace la macro, te crea 3 hojas,
Hoja 78, con el registro que empieza con la cuenta 78
Hoja 110, con 4 registros, los que en la columna cuenta dicen 110
Y Hoja 120, con 5 registros.

Te anexo una imagen de como debes tener tus datos y al final de la macro como queda tu excel.

http://www.subeimagenes.com/img/creahojas-418539.html

Revisa nuevamente las instrucciones y las imágenes y me dices

Saludos. Dam

Gracias nuevamente Dam,

creo que el problema está solucionado; era cuestión de eliminar/insertar columnas. Para terminar la consulta, quisiera saber si se pueden copiar los datos tal y como lo hace la macro, que los datos caigan a una hoja ya con un encabezado definido. Actualmente, crea las hojas y traslada los datos tabulados, pero a hojas sin formato, títulos ni encabezados.

Por ejemplo, quisiera que cayeran en una hoja que tuviera 2 filas de encabezado, además de 1 de título; por lo que los datos empezarían a partir de la fila # 5.

Entre estas dos líneas agrega : Range("a5"). Select, te debe quedar así:

Worksheets. Add
Range("a5").Select
ActiveSheet. Paste

Saludos. DaM

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas