UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Solo consultas sobre Bases de Datos y Tablas Dinámicas Excel.
Reglas del Foro 1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!

UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor GREMA90 » 28 Ago 2018 14:29

Tengo 80 libros con la misma estructura (15 hojas por libro), quisiera unirlas todas en un único libro, en vez de ir copiando y pegando. Me imagino que se puede hacer, pero no lo logro. Me podeis echas una mano.

Gracias de antemano.
GREMA90
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 92
Registrado: 08 Oct 2004 07:42
Ubicación: CACERES

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor Héctor Miguel » 29 Ago 2018 01:31

tu pregunta es una punta de iceberg, puedes aclarar algunas dudas como las siguientes ?:

que significa "unirlas todas (las hojas) en un unico libro" ?
- quieres un libro nuevo con las 1200 hojas de tus 80 libros ?
- cuales son los nombres de las hojas (habra algun conflicto de nombres repetidos) ?
- o quieres pasar los datos de cada hoja a un libro nuevo en una sola hoja (bloque bajo bloque) ?

(si las hay) te interesa conservar formulas (o solo pegar valores) ?
(las formulas se pueden distorsionar al copiar hojas entre libros y puede haber conflicto con nombres asignados)

todas las hojas en todos los libros usan las mismas columnas y empiezan en la misma fila ?
existen (por casualidad) celdas "combinadas" en cualquiera de las hojas ?
(o filas/columnas en blanco como bloques de informacion distinta ?)

todos los libros estan en la misma (sub)carpeta o existe algun "patron" en el nombre de los libros ?

de seguro me estoy dejando dudas "en el tintero" (como formatos, macros y objetos incrustados), pero...
si tienes informacion no comentada, es buen momento para hacerlo

saludos,
hector.
Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 4728
Registrado: 26 Mar 2005 18:31

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor GREMA90 » 29 Ago 2018 03:01

Gracias por contestar.

Únicamente deseo pegar valores
Cada libro contiene 15 hojas, siempre se llaman igual
lo que quiero hacer es unirlas, es decir pegar cada hoja a continuación de otra anterior

Es decir abro un libro y pego cada hoja a continuación de la anterior y así sucesivamente, abro otro libro y lo vuelvo a pegar a partir del anterior........

Me quedaría un único libro con 15 hojas

todos los libros están en la misma carpeta.

No hay cosas raras, solo son datos, numeros , textos y fechas en distintas columnas.

En todas las hojas los datos comienzan en a2, a1 son los nombres de los campos.

Y creo que no hay nada mas a destacar
GREMA90
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 92
Registrado: 08 Oct 2004 07:42
Ubicación: CACERES

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor Héctor Miguel » 29 Ago 2018 22:47

con todos los archivos en la misma carpeta (incluso el que concentra con la macro), un procedimiento como el siguiente pudiera ser de utilidad
Código: Seleccionar todo
sub consolidaLibros(): application.screenupdating = false
  dim ruta as string, base as string, archivo as string, n as byte, x as byte
  ruta = thisworkbook.path & "\": base = thisworkbook.name: archivo = dir(ruta & "*.xls*")
  do while archivo <> "": if archivo = base then goto siguiente
    workbooks.open ruta & archivo
    for n = 1 to 15 ' <= si NO son 15 hojas, ajusta el limite aqui '
      with worksheets(n).range("a1").currentregion
        if x = 0 then thisworkbook.worksheets(n).range("a1") _
          .resize(, .columns.count).value = .resize(1).value
        with .offset(1).resize(.rows.count - 1)
          thisworkbook.worksheets(n).range("a" & rows.count).end(xlup) _
            .offset(1).resize(.rows.count, .columns.count).value = .value
        end with: end with: next: activeworkbook.close false: x = x + 1
siguiente: archivo = dir(): loop
end sub

el libro que concentra debe tener ya las 15 hojas en blanco (los nombres dependen de lo desconocido ?)
se asume que las hojas estan en el mismo orden en todos los libros (o comenta los nombres exactos de cada hoja ?)
se asume tambien que NO hay separacion entre los datos a copiar (filas o columnas enteras en blanco entre los datos)
los formatos (fechas y otros personalizados) NO se trasladan al copiar valores (toca reponerlos donde corresponda)

cada hoja de cada libro se agrega (solo en valores) en la misma hoja del libro que concentra

saludos,
hector.
Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 4728
Registrado: 26 Mar 2005 18:31

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor GREMA90 » 30 Ago 2018 03:08

Solo decirte que funciona muy bien.

Pero desgraciadamente no podré aplicarla y tendré que hacerlo de forma manual, visto detalladamente existen ciertos cambios en algunos libros con respecto a otros y por desgracia no son todos iguales. Puse on error resume next para que no parase y algunas tablas quedaron mal. Uno de los problemas que veo es que en algunas tablas la hoja 1 se llama Luis y en otras es la hoja 13 la que se llama Luis, y al unirlas lógicamente las mezcla unas con otras.
Podría ser que en lugar de tener en cuenta el nº de hoja fuera el nombre de la hoja?

Te agradezco enormemente el esfuerzo por tu macro.

Un saludo.
GREMA90
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 92
Registrado: 08 Oct 2004 07:42
Ubicación: CACERES

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor Héctor Miguel » 30 Ago 2018 20:34

GREMA90 escribió:... existen ciertos cambios en algunos libros... no son todos iguales... Uno... es que en algunas tablas la hoja 1 se llama Luis y en otras es la hoja 13 la que se llama Luis...

este "detalle" en las hojas era una eventualidad por lo que te comente que el orden de las hojas debia ser el mismo para todos los libros :(

se puede adaptar para los nombres de las hojas (en lugar de su posicion) siempre y cuando los nombres sean iguales en todos los libros (?)

comentas de otros "detalles" pero solo expones el de los nombres, cuales son los otros (exactamente) ?

saludos,
hector.
Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 4728
Registrado: 26 Mar 2005 18:31

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor GREMA90 » 01 Sep 2018 16:25

Con ese pequeño cambio sería suficiente, el resto debería arreglarlo de manera manual, ya serian pocas cosas.

Muchas gracias por tu ayuda, Hector.
GREMA90
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 92
Registrado: 08 Oct 2004 07:42
Ubicación: CACERES

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor GREMA90 » 01 Sep 2018 16:26

Los nombres de las hojas no cambian
GREMA90
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 92
Registrado: 08 Oct 2004 07:42
Ubicación: CACERES

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor Héctor Miguel » 01 Sep 2018 17:36

GREMA90 escribió:... el resto debería arreglarlo de manera manual, ya serian pocas cosas...

el concepto es el mismo, solo agregue una variable para una matriz con el nombre de las (15 ?) hojas
- no importa si las escribes con [may/min]usculas, tampoco el orden que tengan en el libro, etc.
- lo que SI importa es que las hojas existan en todos los libros (incluso en el de la macro)
- OJO con caracteres diferentes (espacios, tildes, ese tipo de cosas) entre la matriz y los nombres reales

saludos,
hector.
Código: Seleccionar todo
sub consolidaLibros(): application.screenupdating = false
  dim ruta as string, base as string, archivo as string, n as byte, x as byte, hojas
' corrige y completa la siguiente matriz con los nombres de las hojas '
  hojas = array("hugo", "paco", "luis", "donald", "daisy", "mickey", "minnie", "tribilin", "lucas")
  ruta = thisworkbook.path & "\": base = thisworkbook.name: archivo = dir(ruta & "*.xls*")
  do while archivo <> "": if archivo = base then goto siguiente
    workbooks.open ruta & archivo
    for n = lbound(hojas) to ubound(hojas)
      with worksheets(hojas(n)).range("a1").currentregion
        if x = 0 then thisworkbook.worksheets(hojas(n)).range("a1") _
          .resize(, .columns.count).value = .resize(1).value
        with .offset(1).resize(.rows.count - 1)
          thisworkbook.worksheets(hojas(n)).range("a" & rows.count).end(xlup) _
            .offset(1).resize(.rows.count, .columns.count).value = .value
        end with: end with: next: activeworkbook.close false: x = x + 1
siguiente: archivo = dir(): loop
end sub
Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 4728
Registrado: 26 Mar 2005 18:31

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor GREMA90 » 03 Sep 2018 04:04

Muchisimas gracias Hector.

Funciona muy bien.

Solo una cosa mas si no es mucho pedir. Podríamos meter una linea con la ruta donde está el archivo/s a consolidar? Es decir abro el archivo base y pongo la ruta del archivo/s que quiero añadir.
GREMA90
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 92
Registrado: 08 Oct 2004 07:42
Ubicación: CACERES

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor GREMA90 » 03 Sep 2018 04:06

O mejor aun dos rutas una el archivo base y otra para el archivo/s a añadir.
GREMA90
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 92
Registrado: 08 Oct 2004 07:42
Ubicación: CACERES

Re: UNIR VARIOS LIBROS CON LA MISMA EXTRUCTURA

Notapor helestial » 24 Oct 2018 17:18

Héctor Miguel escribió: Héctor Miguel


Espectacular, muchas gracias por compartir tus conocimientos Héctor. Pasé por aquí al ver y tu macro ahorré más de 2 días, ya sea haciendo la macro (que estoy absolutamente oxidado cerebralmente) o copiaba y pegaba....

Se agradece mucho
helestial
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 5
Registrado: 09 Jul 2014 19:06


Volver a Bases de Datos y Tablas Dinámicas

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados