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.
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
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
-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.
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
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
------ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- --
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.
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
"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
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.
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 +
Muchas gracias
Francisco Parrilla ha escrito:
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.
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
Muy útil, Francisco Parrilla y martín.Gracias
Saludos, Gavillas.