como puedo juntar varias hojas de excel en una sola

18/02/2005 - 02:09 por Isrrael | Informe spam
Hola a la comunidad,
¿cómo puedo hacer para poder juntar en promedio 30 hojas de excel con la
misma informacion, pero que terminan en distintas filas. Estoy tratando de
consolidarlas con la función consolidar, pero cada vez que agrego un rango,
me dice que no es válido.
alguien tendrá alguna idea?
saludos

Preguntas similare

Leer las respuestas

#1 KL
18/02/2005 - 12:00 | Informe spam
Hola Isrrael,

Prueba el macro de abajo si las siguientes hipotesis son correctas:
1) La primera hoja es a donde se copia el resto de hojas
2) La fila [1] contiene encabezados en todas las hojas
3) Ningun registro puede tener la celda en la columna [A] vacia
4) Se tienen q consolidar todas las hojas del libro
5) Todas las hojas tienen el mismo orden y numero de columnas

Saludos,
KL

'Inicio Codigo
Sub test()
Dim h As Long, hFinal As Worksheet
Dim rngOrig As Range, rngDest As Range
Dim Fila As Long, UltFila As Long, UltCol As Integer

Application.ScreenUpdating = False
With ThisWorkbook
Set hFinal = .Worksheets(1)
UltCol = hFinal.Columns(256).End(xlToLeft).Column
For h = 2 To .Worksheets.Count
Fila = hFinal.Range("A65536").End(xlUp).Row
With Worksheets(h)
UltFila = .Range("A65536").End(xlUp).Row
Set rngOrig = .Range(.Cells(2, 1), _
.Cells(UltFila, UltCol))
End With
With hFinal
Set rngDest = .Range(.Cells(Fila + 1, 1), _
.Cells(Fila + UltFila - 1, UltCol))
End With

'Si hay q copiar formulas y formatos usa "Copy"
'rngOrig.Copy rngDest

'Si solo se quiere copiar constantes usa "="
rngDest.Value = rngOrig.Value
Next h
End With
Application.ScreenUpdating = True
End Sub
'Fin Codigo


"Isrrael" <pcpersonal> wrote in message
news:%
Hola a la comunidad,
¿cómo puedo hacer para poder juntar en promedio 30 hojas de excel con la
misma informacion, pero que terminan en distintas filas. Estoy tratando de
consolidarlas con la función consolidar, pero cada vez que agrego un
rango, me dice que no es válido.
alguien tendrá alguna idea?
saludos

Respuesta Responder a este mensaje
#2 Isrrael
19/02/2005 - 00:31 | Informe spam
Caray!,
Siempre me dejas sorprendido!, veo que necesito leer muchos libros de Visual
Basic para poder comprender lo que me mandaste, por que de que funciona, no
sólo funciona, sino mejora la palabra funciona. Ahora, bueno, sólo por
curiosidad, donde puedo apoyarme (web site, book, etc) para entender y poder
implementar soluciones como la que me has planteado.

Muchas gracias,
Excelente habilidad de comprender los requerimientos de los demás pocos lo
tienen,
Saludos y gracias nuevamente
Isrrael Roldán
"KL" wrote in message
news:
Hola Isrrael,

Prueba el macro de abajo si las siguientes hipotesis son correctas:
1) La primera hoja es a donde se copia el resto de hojas
2) La fila [1] contiene encabezados en todas las hojas
3) Ningun registro puede tener la celda en la columna [A] vacia
4) Se tienen q consolidar todas las hojas del libro
5) Todas las hojas tienen el mismo orden y numero de columnas

Saludos,
KL

'Inicio Codigo
Sub test()
Dim h As Long, hFinal As Worksheet
Dim rngOrig As Range, rngDest As Range
Dim Fila As Long, UltFila As Long, UltCol As Integer

Application.ScreenUpdating = False
With ThisWorkbook
Set hFinal = .Worksheets(1)
UltCol = hFinal.Columns(256).End(xlToLeft).Column
For h = 2 To .Worksheets.Count
Fila = hFinal.Range("A65536").End(xlUp).Row
With Worksheets(h)
UltFila = .Range("A65536").End(xlUp).Row
Set rngOrig = .Range(.Cells(2, 1), _
.Cells(UltFila, UltCol))
End With
With hFinal
Set rngDest = .Range(.Cells(Fila + 1, 1), _
.Cells(Fila + UltFila - 1, UltCol))
End With

'Si hay q copiar formulas y formatos usa "Copy"
'rngOrig.Copy rngDest

'Si solo se quiere copiar constantes usa "="
rngDest.Value = rngOrig.Value
Next h
End With
Application.ScreenUpdating = True
End Sub
'Fin Codigo


"Isrrael" <pcpersonal> wrote in message
news:%
Hola a la comunidad,
¿cómo puedo hacer para poder juntar en promedio 30 hojas de excel con la
misma informacion, pero que terminan en distintas filas. Estoy tratando
de consolidarlas con la función consolidar, pero cada vez que agrego un
rango, me dice que no es válido.
alguien tendrá alguna idea?
saludos





Respuesta Responder a este mensaje
#3 KL
19/02/2005 - 11:44 | Informe spam
Hola Isrrael.

Muchas gracias por tu feedback. Mira este anlace a ver si te sirve:
http://tinyurl.com/59tow

Saludos,
KL

"Isrrael" <pcpersonal> wrote in message
news:%
Caray!,
Siempre me dejas sorprendido!, veo que necesito leer muchos libros de
Visual Basic para poder comprender lo que me mandaste, por que de que
funciona, no sólo funciona, sino mejora la palabra funciona. Ahora, bueno,
sólo por curiosidad, donde puedo apoyarme (web site, book, etc) para
entender y poder implementar soluciones como la que me has planteado.

Muchas gracias,
Excelente habilidad de comprender los requerimientos de los demás pocos lo
tienen,
Saludos y gracias nuevamente
Isrrael Roldán
"KL" wrote in message
news:
Hola Isrrael,

Prueba el macro de abajo si las siguientes hipotesis son correctas:
1) La primera hoja es a donde se copia el resto de hojas
2) La fila [1] contiene encabezados en todas las hojas
3) Ningun registro puede tener la celda en la columna [A] vacia
4) Se tienen q consolidar todas las hojas del libro
5) Todas las hojas tienen el mismo orden y numero de columnas

Saludos,
KL

'Inicio Codigo
Sub test()
Dim h As Long, hFinal As Worksheet
Dim rngOrig As Range, rngDest As Range
Dim Fila As Long, UltFila As Long, UltCol As Integer

Application.ScreenUpdating = False
With ThisWorkbook
Set hFinal = .Worksheets(1)
UltCol = hFinal.Columns(256).End(xlToLeft).Column
For h = 2 To .Worksheets.Count
Fila = hFinal.Range("A65536").End(xlUp).Row
With Worksheets(h)
UltFila = .Range("A65536").End(xlUp).Row
Set rngOrig = .Range(.Cells(2, 1), _
.Cells(UltFila, UltCol))
End With
With hFinal
Set rngDest = .Range(.Cells(Fila + 1, 1), _
.Cells(Fila + UltFila - 1, UltCol))
End With

'Si hay q copiar formulas y formatos usa "Copy"
'rngOrig.Copy rngDest

'Si solo se quiere copiar constantes usa "="
rngDest.Value = rngOrig.Value
Next h
End With
Application.ScreenUpdating = True
End Sub
'Fin Codigo


"Isrrael" <pcpersonal> wrote in message
news:%
Hola a la comunidad,
¿cómo puedo hacer para poder juntar en promedio 30 hojas de excel con la
misma informacion, pero que terminan en distintas filas. Estoy tratando
de consolidarlas con la función consolidar, pero cada vez que agrego un
rango, me dice que no es válido.
alguien tendrá alguna idea?
saludos









Respuesta Responder a este mensaje
#4 KL
19/02/2005 - 12:38 | Informe spam
Isrrael,

Aqui va el codigo explicado. Espero no liarte aun mas. Ya me diras.

Saludos,
KL

'Inicio Codigo
Sub test()
'Declaramos las variables.
Dim h As Long, hFinal As Worksheet
Dim rngOrig As Range, rngDest As Range
Dim Fila As Long, UltFila As Long, UltCol As Integer

'congelamos la pantalla.
Application.ScreenUpdating = False

'La construccion With...End With sirve para evitar
'el uso redundante de un elemento de codigo en este
'caso Thisworkbook ahorrando espacio y disminuyendo
'la probabilidad de errores al introducir cambios.
With ThisWorkbook

'Creamos la variable de la hoja Final en este
'caso la primera hoja del libro q es donde
'se consolidarian el resto de las hojas. Observa
'que Worksheet(1) lleva un punto delante, lo cual
'significa q va precedido por ThisWorkbook que
'hemos separado con With...End With mas arriba.
Set hFinal = .Worksheets(1)

'Ahora para cada hoja q va ha ser copiada a la Final
'tendremos que determinar las dimensiones del rango
'copiado y determinar el rango a donde vamos a
'copiarlas. Los dos rangos variaran su longitud y
'posicion (no el ancho) a medida q vayamos copiando.

'Primero creamos la variable de la ultima columna
'para todos los casos aprovechando los encabezados
'o datos, si los hay, de la hoja principal.
UltCol = hFinal.Columns(256).End(xlToLeft).Column

'Iniciamos el bucle para todos los numeros de hoja
'menos el de la primera, o sea, de la segunda a la
'q lleva el numero correspondiente al numero total
'de hojas en el libro. Fijate otra vez q
'Worksheets.Count lleva un punto delante q es el
'mismo caso q te he explicado mas arriba y lo sera
'a lo largo de este codigo.
For h = 2 To .Worksheets.Count

'Establecemos el numero de la ultima fila llena de
'la hoja a la que vamos a copiar el resto.
Fila = hFinal.Range("A65536").End(xlUp).Row

'Usando el numero q va saliendo de nuestro bucle
'establecemos la hoja cuyos datos vamos a copiar
'en este ciclo del bucle. Tambien aprovechamos para
'crear otra construccion incrustada de With...
'End With para evitar la repeticion de .Worksheets(h)
With .Worksheets(h)

'Determinamos el numero de la ultoma Fila llena
'de la hoja copiada...
UltFila = .Range("A65536").End(xlUp).Row

'...y construimos el rango a copiar (la variable
'rngOrig) usando los datos disponibles: sabemos q
'la primera celda del rango sera A2 o sea Cells(2,1)
'(asi evitamos copiar los encabezados de la 1ra fila)
'y la ultima estara en la interseccion de la ultima
'fila (UltFila) y la ultima columna (UltCol), las
'cuales habiamos determinado con anterioridad.
Set rngOrig = .Range(.Cells(2, 1), _
.Cells(UltFila, UltCol))
End With

'Ahora construimos el rango a donde vamos a copiar
'(rngDest) q tendra las mismas dimensiones q el
'rngOrig, solo q estara desplazado hacia abajo ya q
'debera empezar mas abajo de la ultima fila llena
'(Fila+1). Por la misma razon la ultima fila del
'rango destino estara desplazada hacia abajo por el
'numero de filas q tiene el rango copiado menos uno
'(Fila + UltFila - 1). Otro With...End With incrustado.
With hFinal
Set rngDest = .Range(.Cells(Fila + 1, 1), _
.Cells(Fila + UltFila - 1, UltCol))
End With

'Esto te he dejado como alternativa a la lenea
'de codigo q aparece inmediatamenete mas abajo
'Si hay q copiar formulas y formatos usa esta
'rngOrig.Copy rngDest

'Si solo se quiere copiar constantes usa esta.
'Observa q el orden de rangos cambia segun q
'instrucion quieres usar.
rngDest.Value = rngOrig.Value

'Aqui es donde acaba el ciclo de nuestro bucle
'y pasa a otro numero de hoja para volcver a
'repetir todo el procedimiento de arriba.
Next h

'Aqui acaba nustra With...End With principal
End With

'Descongelamos la pantalla.
Application.ScreenUpdating = True
End Sub
'Fin Codigo
Respuesta Responder a este mensaje
#5 Isrrael
21/02/2005 - 21:12 | Informe spam
Hola KL,
Estoy leyendo con muucha calma las explicaciones que me has enviado (mil
gracias!) y ya estoy comprendiendo un poco mas sobre esto. Por otro lado,
compraré algún libro de los que me has recomendado,

En verdad sigo sorprendido,
nuevamente, mil gracias!
I Roldán
"KL" wrote in message
news:
Isrrael,

Aqui va el codigo explicado. Espero no liarte aun mas. Ya me diras.

Saludos,
KL

'Inicio Codigo
Sub test()
'Declaramos las variables.
Dim h As Long, hFinal As Worksheet
Dim rngOrig As Range, rngDest As Range
Dim Fila As Long, UltFila As Long, UltCol As Integer

'congelamos la pantalla.
Application.ScreenUpdating = False

'La construccion With...End With sirve para evitar
'el uso redundante de un elemento de codigo en este
'caso Thisworkbook ahorrando espacio y disminuyendo
'la probabilidad de errores al introducir cambios.
With ThisWorkbook

'Creamos la variable de la hoja Final en este
'caso la primera hoja del libro q es donde
'se consolidarian el resto de las hojas. Observa
'que Worksheet(1) lleva un punto delante, lo cual
'significa q va precedido por ThisWorkbook que
'hemos separado con With...End With mas arriba.
Set hFinal = .Worksheets(1)

'Ahora para cada hoja q va ha ser copiada a la Final
'tendremos que determinar las dimensiones del rango
'copiado y determinar el rango a donde vamos a
'copiarlas. Los dos rangos variaran su longitud y
'posicion (no el ancho) a medida q vayamos copiando.

'Primero creamos la variable de la ultima columna
'para todos los casos aprovechando los encabezados
'o datos, si los hay, de la hoja principal.
UltCol = hFinal.Columns(256).End(xlToLeft).Column

'Iniciamos el bucle para todos los numeros de hoja
'menos el de la primera, o sea, de la segunda a la
'q lleva el numero correspondiente al numero total
'de hojas en el libro. Fijate otra vez q
'Worksheets.Count lleva un punto delante q es el
'mismo caso q te he explicado mas arriba y lo sera
'a lo largo de este codigo.
For h = 2 To .Worksheets.Count

'Establecemos el numero de la ultima fila llena de
'la hoja a la que vamos a copiar el resto.
Fila = hFinal.Range("A65536").End(xlUp).Row

'Usando el numero q va saliendo de nuestro bucle
'establecemos la hoja cuyos datos vamos a copiar
'en este ciclo del bucle. Tambien aprovechamos para
'crear otra construccion incrustada de With...
'End With para evitar la repeticion de .Worksheets(h)
With .Worksheets(h)

'Determinamos el numero de la ultoma Fila llena
'de la hoja copiada...
UltFila = .Range("A65536").End(xlUp).Row

'...y construimos el rango a copiar (la variable
'rngOrig) usando los datos disponibles: sabemos q
'la primera celda del rango sera A2 o sea Cells(2,1)
'(asi evitamos copiar los encabezados de la 1ra fila)
'y la ultima estara en la interseccion de la ultima
'fila (UltFila) y la ultima columna (UltCol), las
'cuales habiamos determinado con anterioridad.
Set rngOrig = .Range(.Cells(2, 1), _
.Cells(UltFila, UltCol))
End With

'Ahora construimos el rango a donde vamos a copiar
'(rngDest) q tendra las mismas dimensiones q el
'rngOrig, solo q estara desplazado hacia abajo ya q
'debera empezar mas abajo de la ultima fila llena
'(Fila+1). Por la misma razon la ultima fila del
'rango destino estara desplazada hacia abajo por el
'numero de filas q tiene el rango copiado menos uno
'(Fila + UltFila - 1). Otro With...End With incrustado.
With hFinal
Set rngDest = .Range(.Cells(Fila + 1, 1), _
.Cells(Fila + UltFila - 1, UltCol))
End With

'Esto te he dejado como alternativa a la lenea
'de codigo q aparece inmediatamenete mas abajo
'Si hay q copiar formulas y formatos usa esta
'rngOrig.Copy rngDest

'Si solo se quiere copiar constantes usa esta.
'Observa q el orden de rangos cambia segun q
'instrucion quieres usar.
rngDest.Value = rngOrig.Value

'Aqui es donde acaba el ciclo de nuestro bucle
'y pasa a otro numero de hoja para volcver a
'repetir todo el procedimiento de arriba.
Next h

'Aqui acaba nustra With...End With principal
End With

'Descongelamos la pantalla.
Application.ScreenUpdating = True
End Sub
'Fin Codigo


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida