Copiar colunmas de varias hojas en una

26/01/2005 - 23:19 por martin | Informe spam
Buenas noches aunque muy frias. He convencido a un amigo para que use
Excel, y tengo el problema de explicarle sus problemas :((

Se trata de lo siguiente. Hemos hecho un libro con 5 hojas. La fila inicial
de cada hoja son nombres de la A2 a la A 170. La columna A son fechas desde
el 01/01/2004 hasta la actualidad. Esto es lo mismo en las 5 hojas. Lo que
varia son los datos en las celdas. Cada hoja corresponde a un tipo de datos
que pertenece a fecha y nombre.

Lo que se pretende es hacer 170 hojas (una por cada nombre) con los datos
correspondientes de cada una de esas 5. de modo que se obtenga una especie
de hoja-ficha de cada nombre con los datos correspondientes a su columna en
cada una de las 5 hojas.

A mano es facil, copiar y pegar 5 columnas (cada una de una hoja) y guardar
la hoja con el nombre correspondiente. Pero, no habria alguna forma de
hacerlo mas rapido?, (es que son 170x5 veces..)



Gracias por adelantado y saludos a todos.


Martin

Preguntas similare

Leer las respuestas

#1 martin
26/01/2005 - 23:26 | Informe spam
Perdon, quise decir desde la B1 a la FN1, la fila inicial que contiene
los nombres.


salu2



Buenas noches aunque muy frias. He convencido a un amigo para que use
Excel, y tengo el problema de explicarle sus problemas :((

Se trata de lo siguiente. Hemos hecho un libro con 5 hojas. La fila
inicial de cada hoja son nombres de la A2 a la A 170. La columna A son
fechas desde el 01/01/2004 hasta la actualidad. Esto es lo mismo en
las 5 hojas. Lo que varia son los datos en las celdas. Cada hoja
corresponde a un tipo de datos que pertenece a fecha y nombre.

Lo que se pretende es hacer 170 hojas (una por cada nombre) con los
datos correspondientes de cada una de esas 5. de modo que se obtenga
una especie de hoja-ficha de cada nombre con los datos
correspondientes a su columna en cada una de las 5 hojas.

A mano es facil, copiar y pegar 5 columnas (cada una de una hoja) y
guardar la hoja con el nombre correspondiente. Pero, no habria alguna
forma de hacerlo mas rapido?, (es que son 170x5 veces..)



Gracias por adelantado y saludos a todos.


Martin

Respuesta Responder a este mensaje
#2 KL
28/01/2005 - 00:29 | Informe spam
Hola Martin,

Una pregunta: ?Los nombres en la primera fila de las 5 hojas son los mismos?
?Estan ordenados identicamente? Si las dos respuestas son afirmativas,
podrias combinar las cinco hojas a mano en cuestion de segundos y luego usar
el codigo VBA q te pongo mas abajo para crear hojas cuyo nombre se cogeria
de la primera fila de cada columna. Acuerdate de sustituir "Hoja1" con el
nombre real entre comillas de tu hoja combinada.

?Comentas?

Saludos,
KL

'Inicio Codigo-
Sub AgregarHojaNueva()
Dim carInvalidos As Variant, Celda As Range
Dim NombreUnico As Boolean, NombreValido As Boolean
Dim Ant As Integer, Desp As Integer
Dim MiHoja As Worksheet, Hoja As Worksheet
Dim i As Integer

'Establecemos la lista de caracteres invalidos.
carInvalidos = Array(":", "\", "/", "?", "*", "[", "]")

'Congelamos la pantalla.
Application.ScreenUpdating = False

'Establecemos la variable para la hoja principal.
Set MiHoja = Worksheets("Hoja1")

'Escaneamos el rango q contiene los nombres de las hojas.
For Each Celda In MiHoja.Range("B1:FN1")

'comprobamos si ya existen hojas con los
'nombres q queremos usar.
NombreUnico = True
For Each Hoja In Worksheets
If Hoja.Name = Celda Then
MsgBox "Ya existe una hoja con el nombre: " _
& Celda
NombreUnico = False
Exit For
End If
Next Hoja

'comprobamos si el nombre contiene
'caracteres invalidos.
NombreValido = True
For i = 0 To UBound(carInvalidos)
If InStr(Celda, carInvalidos(i)) Then
MsgBox "El nombre " & Celda _
& " contiene caracteres invalidos (" _
& carInvalidos(i) & ")."
NombreValido = False
Exit For
End If
Next i

'Creamos las hojas y asignamos los nombres validos.
If Not IsEmpty(Celda) And NombreUnico And NombreValido Then
With Worksheets.Add(After:= _
Worksheets(Worksheets.Count))
.Name = Celda.Value
Celda.Parent.Columns("A").Copy .Range("A1")
Celda.EntireColumn.Copy .Range("B1")
End With
End If
Next Celda

'Procedemos a ordenar las hojas alfabeticamente.
For Desp = 2 To Worksheets.Count
For Ant = Desp To Worksheets.Count
If UCase(Worksheets(Ant).Name) < _
UCase(Worksheets(Desp).Name) Then _
Worksheets(Ant).Move Before:=Worksheets(Desp)
Next
Next

'Volvemos a la hoja principal.
MiHoja.Activate
End Sub
'Fin Codigo-


"martin" wrote in message
news:
Buenas noches aunque muy frias. He convencido a un amigo para que use
Excel, y tengo el problema de explicarle sus problemas :((

Se trata de lo siguiente. Hemos hecho un libro con 5 hojas. La fila
inicial
de cada hoja son nombres de la A2 a la A 170. La columna A son fechas
desde
el 01/01/2004 hasta la actualidad. Esto es lo mismo en las 5 hojas. Lo que
varia son los datos en las celdas. Cada hoja corresponde a un tipo de
datos
que pertenece a fecha y nombre.

Lo que se pretende es hacer 170 hojas (una por cada nombre) con los datos
correspondientes de cada una de esas 5. de modo que se obtenga una especie
de hoja-ficha de cada nombre con los datos correspondientes a su columna
en
cada una de las 5 hojas.

A mano es facil, copiar y pegar 5 columnas (cada una de una hoja) y
guardar
la hoja con el nombre correspondiente. Pero, no habria alguna forma de
hacerlo mas rapido?, (es que son 170x5 veces..)



Gracias por adelantado y saludos a todos.


Martin
Respuesta Responder a este mensaje
#3 martin
28/01/2005 - 10:11 | Informe spam
Gracias por la respuesta, KL. He tardado en contestar porque mi
ignorancia es tan grande (bueno, un poco mas grande aun) como mi
curiosidad. He estado buscando como combinar las 5 hojas en una y no
encuentro la forma, algo relacionado con referencias 3D en la ayuda de
excel, pero no acabo de aclararme. Respecto a tu pregunta, si. Las cinco
hajas tienen esa fila con los mismos nombres y en el mismo orden que es
alfabetico.
¿Podrias decirme como combino a mano las 5 hojas?. Selecciono las 5, voy
a donde y hago ¿que?, " el que no sabe es como el que no ve".

Mil gracias. Un saludo.

martin




Hola Martin,

Una pregunta: ?Los nombres en la primera fila de las 5 hojas son los
mismos? ?Estan ordenados identicamente? Si las dos respuestas son
afirmativas, podrias combinar las cinco hojas a mano en cuestion de
segundos y luego usar el codigo VBA q te pongo mas abajo para crear
hojas cuyo nombre se cogeria de la primera fila de cada columna.
Acuerdate de sustituir "Hoja1" con el nombre real entre comillas de tu
hoja combinada.

?Comentas?

Saludos,
KL

'Inicio Codigo-
Sub AgregarHojaNueva()
Dim carInvalidos As Variant, Celda As Range
Dim NombreUnico As Boolean, NombreValido As Boolean
Dim Ant As Integer, Desp As Integer
Dim MiHoja As Worksheet, Hoja As Worksheet
Dim i As Integer

'Establecemos la lista de caracteres invalidos.
carInvalidos = Array(":", "\", "/", "?", "*", "[", "]")

'Congelamos la pantalla.
Application.ScreenUpdating = False

'Establecemos la variable para la hoja principal.
Set MiHoja = Worksheets("Hoja1")

'Escaneamos el rango q contiene los nombres de las hojas.
For Each Celda In MiHoja.Range("B1:FN1")

'comprobamos si ya existen hojas con los
'nombres q queremos usar.
NombreUnico = True
For Each Hoja In Worksheets
If Hoja.Name = Celda Then
MsgBox "Ya existe una hoja con el nombre: " _
& Celda
NombreUnico = False
Exit For
End If
Next Hoja

'comprobamos si el nombre contiene
'caracteres invalidos.
NombreValido = True
For i = 0 To UBound(carInvalidos)
If InStr(Celda, carInvalidos(i)) Then
MsgBox "El nombre " & Celda _
& " contiene caracteres invalidos (" _
& carInvalidos(i) & ")."
NombreValido = False
Exit For
End If
Next i

'Creamos las hojas y asignamos los nombres validos.
If Not IsEmpty(Celda) And NombreUnico And NombreValido Then
With Worksheets.Add(After:= _
Worksheets(Worksheets.Count))
.Name = Celda.Value
Celda.Parent.Columns("A").Copy .Range("A1")
Celda.EntireColumn.Copy .Range("B1")
End With
End If
Next Celda

'Procedemos a ordenar las hojas alfabeticamente.
For Desp = 2 To Worksheets.Count
For Ant = Desp To Worksheets.Count
If UCase(Worksheets(Ant).Name) < _
UCase(Worksheets(Desp).Name) Then _
Worksheets(Ant).Move Before:=Worksheets(Desp)
Next
Next

'Volvemos a la hoja principal.
MiHoja.Activate
End Sub
'Fin Codigo-


"martin" wrote in message
news:
Buenas noches aunque muy frias. He convencido a un amigo para que use
Excel, y tengo el problema de explicarle sus problemas :((

Se trata de lo siguiente. Hemos hecho un libro con 5 hojas. La fila
inicial
de cada hoja son nombres de la A2 a la A 170. La columna A son fechas
desde
el 01/01/2004 hasta la actualidad. Esto es lo mismo en las 5 hojas.
Lo que varia son los datos en las celdas. Cada hoja corresponde a un
tipo de datos
que pertenece a fecha y nombre.

Lo que se pretende es hacer 170 hojas (una por cada nombre) con los
datos correspondientes de cada una de esas 5. de modo que se obtenga
una especie de hoja-ficha de cada nombre con los datos
correspondientes a su columna en
cada una de las 5 hojas.

A mano es facil, copiar y pegar 5 columnas (cada una de una hoja) y
guardar
la hoja con el nombre correspondiente. Pero, no habria alguna forma
de hacerlo mas rapido?, (es que son 170x5 veces..)



Gracias por adelantado y saludos a todos.


Martin




Respuesta Responder a este mensaje
#4 KL
28/01/2005 - 10:22 | Informe spam
Martin,

Siento haberte liado (no creo q tenga q ver con tu nivel de conocimiento de
Excel). Es q habia asumido ciertas cosas sobre los datos q al parecer no son
ciertas. Creo q no hay manera automatica de combinar los datos de las hojas
aparte de las tablas dinamicas (en este caso no nos vale) o codigo VBA. Para
este ultimo si q hace falta tener una mejor (mas detallada) descripcion y
tal vez ejemplos de los datos reales.

?Comentas?

Saludos,
KL

"martin" wrote in message
news:
Gracias por la respuesta, KL. He tardado en contestar porque mi
ignorancia es tan grande (bueno, un poco mas grande aun) como mi
curiosidad. He estado buscando como combinar las 5 hojas en una y no
encuentro la forma, algo relacionado con referencias 3D en la ayuda de
excel, pero no acabo de aclararme. Respecto a tu pregunta, si. Las cinco
hajas tienen esa fila con los mismos nombres y en el mismo orden que es
alfabetico.
¿Podrias decirme como combino a mano las 5 hojas?. Selecciono las 5, voy
a donde y hago ¿que?, " el que no sabe es como el que no ve".

Mil gracias. Un saludo.

martin




Hola Martin,

Una pregunta: ?Los nombres en la primera fila de las 5 hojas son los
mismos? ?Estan ordenados identicamente? Si las dos respuestas son
afirmativas, podrias combinar las cinco hojas a mano en cuestion de
segundos y luego usar el codigo VBA q te pongo mas abajo para crear
hojas cuyo nombre se cogeria de la primera fila de cada columna.
Acuerdate de sustituir "Hoja1" con el nombre real entre comillas de tu
hoja combinada.

?Comentas?

Saludos,
KL

'Inicio Codigo-
Sub AgregarHojaNueva()
Dim carInvalidos As Variant, Celda As Range
Dim NombreUnico As Boolean, NombreValido As Boolean
Dim Ant As Integer, Desp As Integer
Dim MiHoja As Worksheet, Hoja As Worksheet
Dim i As Integer

'Establecemos la lista de caracteres invalidos.
carInvalidos = Array(":", "\", "/", "?", "*", "[", "]")

'Congelamos la pantalla.
Application.ScreenUpdating = False

'Establecemos la variable para la hoja principal.
Set MiHoja = Worksheets("Hoja1")

'Escaneamos el rango q contiene los nombres de las hojas.
For Each Celda In MiHoja.Range("B1:FN1")

'comprobamos si ya existen hojas con los
'nombres q queremos usar.
NombreUnico = True
For Each Hoja In Worksheets
If Hoja.Name = Celda Then
MsgBox "Ya existe una hoja con el nombre: " _
& Celda
NombreUnico = False
Exit For
End If
Next Hoja

'comprobamos si el nombre contiene
'caracteres invalidos.
NombreValido = True
For i = 0 To UBound(carInvalidos)
If InStr(Celda, carInvalidos(i)) Then
MsgBox "El nombre " & Celda _
& " contiene caracteres invalidos (" _
& carInvalidos(i) & ")."
NombreValido = False
Exit For
End If
Next i

'Creamos las hojas y asignamos los nombres validos.
If Not IsEmpty(Celda) And NombreUnico And NombreValido Then
With Worksheets.Add(After:= _
Worksheets(Worksheets.Count))
.Name = Celda.Value
Celda.Parent.Columns("A").Copy .Range("A1")
Celda.EntireColumn.Copy .Range("B1")
End With
End If
Next Celda

'Procedemos a ordenar las hojas alfabeticamente.
For Desp = 2 To Worksheets.Count
For Ant = Desp To Worksheets.Count
If UCase(Worksheets(Ant).Name) < _
UCase(Worksheets(Desp).Name) Then _
Worksheets(Ant).Move Before:=Worksheets(Desp)
Next
Next

'Volvemos a la hoja principal.
MiHoja.Activate
End Sub
'Fin Codigo-


"martin" wrote in message
news:
Buenas noches aunque muy frias. He convencido a un amigo para que use
Excel, y tengo el problema de explicarle sus problemas :((

Se trata de lo siguiente. Hemos hecho un libro con 5 hojas. La fila
inicial
de cada hoja son nombres de la A2 a la A 170. La columna A son fechas
desde
el 01/01/2004 hasta la actualidad. Esto es lo mismo en las 5 hojas.
Lo que varia son los datos en las celdas. Cada hoja corresponde a un
tipo de datos
que pertenece a fecha y nombre.

Lo que se pretende es hacer 170 hojas (una por cada nombre) con los
datos correspondientes de cada una de esas 5. de modo que se obtenga
una especie de hoja-ficha de cada nombre con los datos
correspondientes a su columna en
cada una de las 5 hojas.

A mano es facil, copiar y pegar 5 columnas (cada una de una hoja) y
guardar
la hoja con el nombre correspondiente. Pero, no habria alguna forma
de hacerlo mas rapido?, (es que son 170x5 veces..)



Gracias por adelantado y saludos a todos.


Martin







Respuesta Responder a este mensaje
#5 martin
28/01/2005 - 11:10 | Informe spam
No me liaste, me parecio de lo mas logico lo que exponias. La lastima es
que no puede ser, :( . Esta tarde con mas tiempo voy a hacerlo con la
siguiente idea, un poco lento pero mas rapido que copypaste: una copia
del libro original (por silasmoscas), creo macro que me ponga en un libro
nuevo la columna A de cada una de las 5 hojas y que borre esa columna. De
ese modo el libro-copia ira perdiendo la columna A cada vez que se
transfieran, las columnas A de cada hoja al libro nuevo. Solo tengo que
cambiar el nombre del libro que se crea cada vez que ejecute la macro. O
sea, 170 ejecuciones. Dados los tiempos que corren, no me parecen muchas.
Ya comentare.

Un saludo y gracias por tus comentarios.


Martin





Martin,

Siento haberte liado (no creo q tenga q ver con tu nivel de
conocimiento de Excel). Es q habia asumido ciertas cosas sobre los
datos q al parecer no son ciertas. Creo q no hay manera automatica de
combinar los datos de las hojas aparte de las tablas dinamicas (en
este caso no nos vale) o codigo VBA. Para este ultimo si q hace falta
tener una mejor (mas detallada) descripcion y tal vez ejemplos de los
datos reales.

?Comentas?

Saludos,
KL

"martin" wrote in message
news:
Gracias por la respuesta, KL. He tardado en contestar porque mi
ignorancia es tan grande (bueno, un poco mas grande aun) como mi
curiosidad. He estado buscando como combinar las 5 hojas en una y no
encuentro la forma, algo relacionado con referencias 3D en la ayuda
de excel, pero no acabo de aclararme. Respecto a tu pregunta, si. Las
cinco hajas tienen esa fila con los mismos nombres y en el mismo
orden que es alfabetico.
¿Podrias decirme como combino a mano las 5 hojas?. Selecciono las 5,
voy a donde y hago ¿que?, " el que no sabe es como el que no ve".

Mil gracias. Un saludo.

martin




Hola Martin,

Una pregunta: ?Los nombres en la primera fila de las 5 hojas son los
mismos? ?Estan ordenados identicamente? Si las dos respuestas son
afirmativas, podrias combinar las cinco hojas a mano en cuestion de
segundos y luego usar el codigo VBA q te pongo mas abajo para crear
hojas cuyo nombre se cogeria de la primera fila de cada columna.
Acuerdate de sustituir "Hoja1" con el nombre real entre comillas de
tu hoja combinada.

?Comentas?

Saludos,
KL

'Inicio Codigo-
Sub AgregarHojaNueva()
Dim carInvalidos As Variant, Celda As Range
Dim NombreUnico As Boolean, NombreValido As Boolean
Dim Ant As Integer, Desp As Integer
Dim MiHoja As Worksheet, Hoja As Worksheet
Dim i As Integer

'Establecemos la lista de caracteres invalidos.
carInvalidos = Array(":", "\", "/", "?", "*", "[", "]")

'Congelamos la pantalla.
Application.ScreenUpdating = False

'Establecemos la variable para la hoja principal.
Set MiHoja = Worksheets("Hoja1")

'Escaneamos el rango q contiene los nombres de las hojas.
For Each Celda In MiHoja.Range("B1:FN1")

'comprobamos si ya existen hojas con los
'nombres q queremos usar.
NombreUnico = True
For Each Hoja In Worksheets
If Hoja.Name = Celda Then
MsgBox "Ya existe una hoja con el nombre: " _
& Celda
NombreUnico = False
Exit For
End If
Next Hoja

'comprobamos si el nombre contiene
'caracteres invalidos.
NombreValido = True
For i = 0 To UBound(carInvalidos)
If InStr(Celda, carInvalidos(i)) Then
MsgBox "El nombre " & Celda _
& " contiene caracteres invalidos (" _
& carInvalidos(i) & ")."
NombreValido = False
Exit For
End If
Next i

'Creamos las hojas y asignamos los nombres validos.
If Not IsEmpty(Celda) And NombreUnico And NombreValido Then
With Worksheets.Add(After:= _
Worksheets(Worksheets.Count))
.Name = Celda.Value
Celda.Parent.Columns("A").Copy .Range("A1")
Celda.EntireColumn.Copy .Range("B1")
End With
End If
Next Celda

'Procedemos a ordenar las hojas alfabeticamente.
For Desp = 2 To Worksheets.Count
For Ant = Desp To Worksheets.Count
If UCase(Worksheets(Ant).Name) < _
UCase(Worksheets(Desp).Name) Then _
Worksheets(Ant).Move Before:=Worksheets(Desp)
Next
Next

'Volvemos a la hoja principal.
MiHoja.Activate
End Sub
'Fin Codigo-


"martin" wrote in message
news:
Buenas noches aunque muy frias. He convencido a un amigo para que
use Excel, y tengo el problema de explicarle sus problemas :((

Se trata de lo siguiente. Hemos hecho un libro con 5 hojas. La fila
inicial
de cada hoja son nombres de la A2 a la A 170. La columna A son
fechas desde
el 01/01/2004 hasta la actualidad. Esto es lo mismo en las 5 hojas.
Lo que varia son los datos en las celdas. Cada hoja corresponde a
un tipo de datos
que pertenece a fecha y nombre.

Lo que se pretende es hacer 170 hojas (una por cada nombre) con los
datos correspondientes de cada una de esas 5. de modo que se
obtenga una especie de hoja-ficha de cada nombre con los datos
correspondientes a su columna en
cada una de las 5 hojas.

A mano es facil, copiar y pegar 5 columnas (cada una de una hoja) y
guardar
la hoja con el nombre correspondiente. Pero, no habria alguna forma
de hacerlo mas rapido?, (es que son 170x5 veces..)



Gracias por adelantado y saludos a todos.


Martin











Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida