Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Crear hojas con los datos de cada fila

0 views
Skip to first unread message

martin

unread,
Aug 20, 2006, 6:44:25 PM8/20/06
to
Hola a todos, estoy intentando hacer una hoja de cada fila de una hoja
"master" que tengo:


conductor km lts eur ruta dias

--------------------------------
C1 13,5 0,9 14 9 3
C2 23,4 0,7 0.9 22 3
C3 33,5 4,4 12 12 3
C4 65,2 2,1 0.8 9 9
C5 21,5 0,7 9 7 14
.
.
.
.
.
.
.
.
Son 84 las filas hasta C84. La pregunta es:

沈ay alguna forma de hacer de cada fila una hoja nueva en el mismo libro de
la "master", o en otro me da igual, de manera que tenga el nombre clave de
cada conductor?

Es decir el resultado serian 84 hojas de dos filas, una de encabezamiento y
una de datos. Es que hacer insertar hoja nueva, renombrar, copiar fila y
pegar me parece una labor de chinos sobre todo porque tendre que repetirla
cada semana. Una ayuda se agradecera mucho.

Salu2. Martin.


Francisco Parrilla

unread,
Aug 20, 2006, 11:59:02 PM8/20/06
to
Suponiendo que las celdas en la columna no esten vacias prueba este codigo:

Sub hojas()
Sheets(1).Select
Range("a2").Select
Set mirng = Range(Cells(2, 1), Cells.End(xlDown))
mirng.Select
For Each xcell In Selection
Sheets.Add After:=Worksheets(Sheets.Count)
Worksheets(Sheets.Count).Name = xcell.Value
Next xcell
End Sub

Por ahora solo el agregar las hojas con los datos, :)
--
Atte.
?T Francisco T?
http://groups.msn.com/ExcelVbaMacrosOffice

El verdadero buscador crece y aprende, y descubre que siempre es el
principal responsable de lo que sucede.
Jorge Bucay

La oscuridad nos envuelve a todos, pero mientras el sabio tropieza en alguna
pared, el ignorante permanece tranquilo en el centro de la estancia.
Anatole France


Francisco Parrilla

unread,
Aug 21, 2006, 2:14:42 AM8/21/06
to
Por ahi va la idea ... por ahora me retiroa descanzar :(
Saludos


Sub hojas()
Dim valors As New Collection
Dim paso
Dim v
Sheets(1).Select
Range("a2").Select
Range(Cells(2, 1), Cells.End(xlDown)).Select


For Each xcell In Selection

valors.Add xcell
Sheets.Add after:=Worksheets(Sheets.Count)


Worksheets(Sheets.Count).Name = xcell.Value
Next xcell

'Recorrer las hojas y pegar los valores
For i = 1 To valors.Count
Sheets(i + 1).Select
Cells(2, 1).Value = valors.Item(i)
Next i
End Sub

martin

unread,
Aug 21, 2006, 4:37:58 AM8/21/06
to
Hola Francisco y gracias. Al ejecutar el codigo que me pones:

-El primero me crea una hoja vacia solo para el primer conductor, con el
nombre CD1, tal como yo quiero, pero solo la primera. No pasa datos de la
fila.

-El segundo hace lo mismo pero la hoja tiene el dato a2 de la fila.

Solo se crea una hoja y solo pasa un dato :(

Alguna idea?, he encontrado un codigo que me crea las hojas en blanco, es
este:


Sub newSheet()
Dim MyRange As Range
Dim C As Range
Dim NewSheetName As String
Dim newSheet As Worksheet
Dim xLastRow As Long

xLastRow = Cells(Rows.Count, "A").End(xlUp).Row
Set MyRange = Range("A1:A" & xLastRow)

For Each C In MyRange
NewSheetName = C.Value
Set newSheet = Sheets.Add
With newSheet
.Move After:=Worksheets(Worksheets.Count)
On Error Resume Next
.Name = NewSheetName
On Error GoTo 0
End With
Next C

End Sub


Pero no me pasa los datos de cada fila a su hoja. Podria crear una macro
para cada fila-hoja pero 84 me parece un poco trabajoso, y si hubiera una
manera de hacero mas rapido lo agradeceria.

Saludos. Me gustan tus citas.

Martin.

Francisco Parrilla

unread,
Aug 21, 2006, 10:00:44 AM8/21/06
to
En eso estamos, solo que por ahora tenemos unos pendientes personales y no
le puedo dedicar mas del tiempo necesario y hacer las pruebas :)
En todo caso alguien mas puede estar haciendo alguna otra sugerencia, ya
vendra.
Saludos

Francisco Parrilla

unread,
Aug 21, 2006, 10:06:43 AM8/21/06
to
Revisa el post ublica el dia 18 del presente titulado "Copiar filas entre
hojas" te puede resultar muy ilustrativo. Contiene un archivo excel en caso
de que estes viendo el foro desde el outlook express.
Saludos

Francisco Parrilla

unread,
Aug 21, 2006, 10:09:12 AM8/21/06
to
Basicamente este es todo el condigo que contiene el archivo:
Esto te lo copia e la ultima fila de la hoja "reporte"
Sub Copiar_Filas()
Selection.Copy Sheets("Reporte").Range("A65536").End(xlUp).Offset(1, 0)
End Sub


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
fil = Target.Row
col = Target.Column
If fil = Range("Dato_A_Buscar").Row And col = Range("Dato_A_Buscar").Column
Then
cod = Range("Dato_A_Buscar")
ultfil = Sheets("Matriz").Range("A65535").End(xlUp).Row
fila = 10
For i = 2 To ultfil
If Sheets("Matriz").Range("C" & i) = Range("Dato_A_Buscar") Then
fila = fila + 1
Range("A" & fila) = Sheets("Matriz").Range("A" & i)
Range("B" & fila) = Sheets("Matriz").Range("B" & i)
Range("C" & fila) = Sheets("Matriz").Range("C" & i)
Range("D" & fila) = Sheets("Matriz").Range("D" & i)
Range("E" & fila) = Sheets("Matriz").Range("G" & i)
Range("F" & fila) = Sheets("Matriz").Range("H" & i)
End If
Next i

End If

End Sub


Francisco Parrilla

unread,
Aug 21, 2006, 5:50:33 PM8/21/06
to
Ok.
Prueba este codigo :)

Sub hojas()
Dim valors As New Collection

Sheets(1).Select
Range("a2").Select
Range(Cells(2, 1), Cells.End(xlDown)).Select

For Each xcell In Selection

valors.Add xcell
Sheets.Add after:=Worksheets(Sheets.Count)


Worksheets(Sheets.Count).Name = xcell.Value
Next xcell

'Recorrer las hojas y pegar los valores
For i = 1 To valors.Count

Sheets(1).Select
Rows(1).Select
Selection.Copy Sheets(i + 1).Range("A1")
Rows(i + 1).Select
Selection.Copy Sheets(i + 1).Range("A65536").End(xlUp).Offset(1, 0)
Next i
End Sub

------ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- --

martin

unread,
Aug 21, 2006, 6:39:29 PM8/21/06
to
Juuuuueeeer, maravilloso!!!!

Mil gracias Francisco. En quince dias pienso comer todo a la Parrilla.
Muchisimas gracias.

Un abuso: esa segunda parte que copia y pega la fila correspondiente en
la hoja correspondiente no se puede "aislar" de modo que si cambio filas
en la hoja master me las copie en las hojas correspondientes a
continuacion de las que ya esten?, es que la coloque sola:

Sub pasavalor

'Recorrer las hojas y pegar los valores
For i = 1 To valors.Count
Sheets(1).Select
Rows(1).Select
Selection.Copy Sheets(i + 1).Range("A1")
Rows(i + 1).Select
Selection.Copy Sheets(i + 1).Range("A65536").End(xlUp).Offset(1, 0)
Next i
End Sub

y como no tengo ni idea de lo que hay que cambiar, da un error y se para
en el For i.

Pero bueno, esto ultimo ya es un poco de lujo eh?, aunque me vendria muy
bien.

Muchas gracias otra vez.


Salu2. Martin.

Francisco Parrilla

unread,
Aug 21, 2006, 9:36:24 PM8/21/06
to
Haz el intento de lo que pides, esta linea del codigo te hace eso me parece
:)

Francisco Parrilla

unread,
Aug 21, 2006, 9:45:36 PM8/21/06
to
A que te refieres con esta linea "si cambio filas en la hoja master ",
pretendes seleccionar mas de una linea ?

Posiblemente de te un error por que no tienes iniciado la coleccion de
valors que son los datos seleccnados de la columna, podrias dar mas detalles
de lo que buscas.

Saludos

Tinteño sonriente :-)

unread,
Aug 21, 2006, 10:34:02 PM8/21/06
to
Martin... un saludo desde el volcan Misti de Arequipa-Peru
Una observacion... porque 84 hojas ?
probable que la informacion de la semana lo digitas en la hoja master
(Faltaria Dia?)
sugiero:
1.- Utilizar una celda vacia del master... para poner el conductor(validado)
2.- Trasladar todos los datos del conductor a una segunda hoja (Podria
usarse tambien con una celda para "traer" los datos del master
3.- ... solo manejaras dos hojas ( 3 si se valida... al conductor)
4.- tu macro no valida datos... de los probables erroneamente dihitrados
... si deseas chateamos.... vil...@hotmail.com (Hs. 21-Lima)
... te entendi ?
Audad

"martin" escribió:

> Hola a todos, estoy intentando hacer una hoja de cada fila de una hoja
> "master" que tengo:
>
>
> conductor km lts eur ruta dias
>
> --------------------------------
> C1 13,5 0,9 14 9 3
> C2 23,4 0,7 0.9 22 3
> C3 33,5 4,4 12 12 3
> C4 65,2 2,1 0.8 9 9
> C5 21,5 0,7 9 7 14
> ..
> ..
> ..
> ..

> ..
> ..
> ..
> ..


> Son 84 las filas hasta C84. La pregunta es:
>

> ¨Hay alguna forma de hacer de cada fila una hoja nueva en el mismo libro de

martin

unread,
Aug 22, 2006, 4:17:32 AM8/22/06
to
Hola Francisco, la columna A de la hoja "master", la de conductores,
siempre es la misma (bueno se da de alta y de baja alguno de vez en cuando,
pero basicamente, es la misma). Lo que cambia cada dia son los
kilometrajes, costos y rutas de acuerdo a las formulas correspondientes.
Cada dia esos datos cambian y a fin de dia paso los datos de cada uno a su
hoja correspondiente (creadas con tu codigo) a continuacion de la fila del
dia anterior..

Tu macro hace dos cosas, crea con el nombre de cada celda de la columna A
una hoja independiente, y pasa los datos de la fila correspondiente a esa
hoja.

Lo que me gustaria es que se pudiera ejecutar de modo independiente esa
parte del codigo que copia la fila en la hoja correspondiente, para no
hacerlo a mano cada dia fila por fila. Se trata de que cada hoja de cada
conductor tenga sus datos dia por dia.
Se hace un poco dificil de explicar....,

Gracias por tu atencion.

Salu2. Martin.

Francisco Parrilla

unread,
Aug 22, 2006, 5:21:34 PM8/22/06
to
Prueba esta rutina:
Este codigo copia los datos desde la celda A2 hasta An en la ultima posicion
de la hoja en cuestion.
No se si sea lo que buscas :)

Sub nuevos_datos()
Dim can As Integer
can = Worksheets.Count
If can = 1 Then Exit Sub
Sheets(1).Select
Range(Cells(2, 1), Cells.End(xlDown)).Select
hoja = 1


For Each xcell In Selection

hoja = hoja + 1
Sheets(1).Select
Rows(xcell.Row).Select
Selection.Copy Sheets(hoja).Range("A65536").End(xlUp).Offset(1, 0)
Next xcell
End Sub
---------------------------------------------------------------------------

Sub hojas()
Dim valors As New Collection
Sheets(1).Select
Range("a2").Select
Range(Cells(2, 1), Cells.End(xlDown)).Select
For Each xcell In Selection
valors.Add xcell
Sheets.Add after:=Worksheets(Sheets.Count)
Worksheets(Sheets.Count).Name = xcell.Value
Next xcell
'Recorrer las hojas y pegar los valores
For i = 1 To valors.Count
Sheets(1).Select
Rows(1).Select

if sheets(i+1).range("a1") >< "" then Selection.Copy Sheets(i +

MarianoB

unread,
Aug 22, 2006, 5:50:04 PM8/22/06
to
Hola Francisco
probando tu código me surge un problema (no por el código sino porque
he modificado las condiciones iniciales a partir de las cuales se ha
creado)
Si tengo la siguiente tabla:
conductor kilometros kilos
a 1 3
b 2 4
c 3 5
d 4 6
e 5 7
f 6 8
e 7 9
cuando se va a renombrar por segunda vez una hoja como "e" indica que
no puede por que ya existe otra con el mismo nombre.¿como se puede
comprobar antes de: Worksheets(Sheets.Count).Name = xcell.Value
que ya existe una hoja con ese nombre para que no aparezca el
error?¿se revisa cada valor de la coleccion para que solo existan
valores unicos?

Muchas gracias

Francisco Parrilla ha escrito:

martin

unread,
Aug 22, 2006, 6:34:49 PM8/22/06
to
Muchas gracias por todo Francisco. No, no es lo que necesito, pero ya lo
he solucionado con 84 macros simples de este tipo:

Windows("master.xls").Activate
Range("B2:AU2").Select
Selection.Copy
Sheets("CD1").Select
Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste

Sheets("eval").Select
Range("B3:AU3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CD2").Select
Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste

Sheets("eval").Select
Range("B4:AU4").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CD3").Select
Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste

Sheets("eval").Select
Range("B5:AU5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CD4").Select
Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste

y asi hasta CD84. Me ha llevado un buen rato, pero quien no sabe usar una
sierra electrica ha de usar un serrucho. Me hubiera gustado ver como se
hacia de una forma sencilla de esas de Next i, pero asi me arreglo.
Gracias por todo.

Salu2. Martin.

martin

unread,
Aug 22, 2006, 8:40:05 PM8/22/06
to
Hola MarianoB, yo encontre algo que a lo mejor puede servirte, es este
fichero: AdvFilterRep.zip y esta en esa pagina:

http://www.contextures.com/excelfiles.html


Salu2. Martin.

> Hola Francisco
> probando tu código me surge un problema (no por el código sino porque
> he modificado las condiciones iniciales a partir de las cuales se ha
> creado)
> Si tengo la siguiente tabla:
> conductor kilometros kilos
> a 1 3
> b 2 4
> c 3 5
> d 4 6
> e 5 7
> f 6 8
> e 7 9
> cuando se va a renombrar por segunda vez una hoja como "e" indica que

> no puede por que ya existe otra con el mismo nombre.żcomo se puede


> comprobar antes de: Worksheets(Sheets.Count).Name = xcell.Value
> que ya existe una hoja con ese nombre para que no aparezca el

> error?żse revisa cada valor de la coleccion para que solo existan

Francisco Parrilla

unread,
Aug 22, 2006, 9:50:14 PM8/22/06
to
Ok


MarianoB

unread,
Aug 23, 2006, 3:53:18 AM8/23/06
to
Muchas gracias a ambos (martin y Francisco Parrilla).

Gavillas

unread,
Aug 23, 2006, 6:40:56 AM8/23/06
to

Muy útil, Francisco Parrilla y martín.Gracias
Saludos, Gavillas.


0 new messages