Separar tabla en varias tablas |
Responder |
Autor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gladiador
Asiduo Unido: 22/Junio/2006 Localización: Venezuela Estado: Sin conexión Puntos: 220 |
Tema: Separar tabla en varias tablas Enviado: 21/Septiembre/2020 a las 04:54 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hola amigos, nuevamente yo por acá.
Solicito ayuda de este foro, pues tengo una tabla que deseo separar/dividir en varia tablas más pequeñas: Ejemplo Tabla General
Deseo separar la tabla original en varias tablas como he mostrado. Existe alguna manera, mi tabla actual tiene como 1300 registros Gracias Gladiador |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3849 |
Enviado: 21/Septiembre/2020 a las 16:07 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Pues así a ojo
Lo que haría para hacerlo como tú quieres es una hoja excel por cada asignatura, es decir, que el nombre de la hoja sea el nombre de la asignatura. Como no dices cuantas asignaturas hay y solo das un ejemplo, voy a suponer que las asignaturas que tienes son esas cuatro, y que en todos los casos está bien escrito el nombre (quiero decir, la asignatura siempre es matemáticas, nunca matematicas ni matemática) Luego haría con VBA un bucle que lea desde la fila 1 hasta la ¿1.300? y vaya copiando el nombre, con lo cual al final conservarás la hoja original y además tendrás todos los usuarios en sus respectivas hojas. Y creo que resultaría más fácil si previamente ordenas la hoja original por el nombre de la asignatura. Un saludo. Luis
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
El Búho es un pajarraco
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5970 |
Enviado: 22/Septiembre/2020 a las 13:40 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Suponiendo
que tus datos están a partir de A1:B1, mi código escribe lo que pides a partir
de J1 (misma hoja, haz los cambios que creas conveniente): Sub prueba()
Dim celda As Range, filaU&, colD&, filaD&
Application.ScreenUpdating = False
filaU = Cells(Rows.Count, 1).End(xlUp).Row
Range("CD2").FormulaR1C1 =
"=IFERROR(9+MATCH(R[-1]C,R[-1]C[-72]:R[-1]C[-1],0),10+COUNTA(R[-1]C[-72]:R[-1]C[-1]))"
For Each celda In Range("A1:A" & filaU).Cells
Range("CD1").Value = celda.Value
colD = Range("CD2").Value
Cells(1, colD).Value = celda.Value
filaD = Cells(Rows.Count, colD).End(xlUp).Row + 1
Cells(filaD, colD).Value = celda.Offset(0, 1).Value
Next celda
Range("CD1:CD2").ClearContents
Application.ScreenUpdating = True End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Saludos desde Tenerife.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chucho
Nuevo Unido: 03/Agosto/2020 Localización: Asturias Estado: Sin conexión Puntos: 13 |
Enviado: 23/Septiembre/2020 a las 16:43 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sin necesidad de VBA, creas una tabla dinámica
Y luego pinchando sobre cualquier grupo te genera una hoja con las personas de la asignatura.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5970 |
Enviado: 23/Septiembre/2020 a las 20:49 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gracias chucho por el aporte, todo suma, sobre todo la intensión.
Una tabla dinámica permite obtener algo parecido, con los 2 campos en Etiquetas de fila ...
... de hecho para mí lo haría así, peeero... no es (exactamente) lo que pide Gladiador y como no conozco las razones que pueda tener para quererlo así... Saludos: Antonio. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Saludos desde Tenerife.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gladiador
Asiduo Unido: 22/Junio/2006 Localización: Venezuela Estado: Sin conexión Puntos: 220 |
Enviado: 28/Septiembre/2020 a las 03:33 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hola Amigos.
Gracias por el aporte de todos. Chucho, ya había probado con una tabla dinámica, pero no me da el resuoltado esperado La solución de AnSanVal, funciona perfecto, muchas gracias. Solo pediría agregar algo. La posibilidad de generar esa misma tabla, de manera dinámica, si agrego o elimino algún nombre o materia La intensión final, es generar una lista desplegable dependiente, de la materia seleccionada. Gracias
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5970 |
Enviado: 28/Septiembre/2020 a las 12:14 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Para actuar dinámicamente al agregar o eliminar, deberás basarte
en el evento Worksheet_Change
de la hoja. Para la lista desplegable tienes ejemplos en mi sitio web, posiblemente
te valga Validación dependiente (3) o Validación con doble lista desplegable
(53). De cualquier modo con Filtro avanzado y una sola tabla*,
podrías tener resuelto todo eso (con el formato de la tabla), incluso lo de
agregar/eliminar. El filtro avanzado se puede generar por código. * Una sola tabla es más polivalente para la
obtención de informes. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Saludos desde Tenerife.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gladiador
Asiduo Unido: 22/Junio/2006 Localización: Venezuela Estado: Sin conexión Puntos: 220 |
Enviado: 29/Septiembre/2020 a las 04:41 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gracias AnSanVal Me podrias ayudar con el código. He estado haciendo el intento y no he podido. Gracias |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5970 |
Enviado: 29/Septiembre/2020 a las 22:29 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Si con «… Ayudar…» te refieres a
hacértelo… no puedo, no debería
haberte dado el anterior en modo funcional, ya que ello significa competencia
desleal hacia otros profesionales que viven de eso. Dices
que lo has intentado y no lo has conseguido. Muestra lo que has hecho y donde te
has bloqueado. Si es un detalle determinado y puedo, intentaré ayudarte. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Saludos desde Tenerife.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gladiador
Asiduo Unido: 22/Junio/2006 Localización: Venezuela Estado: Sin conexión Puntos: 220 |
Enviado: 30/Septiembre/2020 a las 01:24 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hola, si, tienes toda la razón AnSanVal. Te comento lo que he estado realizando En Worksheet_Change, he colocado, además del código que me enviaste, la siguiente isntrucción ActiveSheet.Range("J1").CurrentRegion.Select Selection.Clear Con la intension de borrar todos los datos y, luego, ejecutar el código que me enviaste. Esto me ha dado "Out of stack space (Error 28)" Esto y me bota del programa. Ya pude entender la razón. Cada vez que extrae un nombre, es un Cambio en la hoja y se debería ejecutar de nuevo la rutina. Probé luego con "Worksheet_TableUpdate", cambiando los datos a una tabla, pero no pasa nada. Se que ha sido muy rudimentario mi enfoque, pero es todo lo que conozco. gracias |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3849 |
Enviado: 30/Septiembre/2020 a las 03:27 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Inténtalo así:
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False ... Application.EnableEvents = True End Sub
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
El Búho es un pajarraco
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gladiador
Asiduo Unido: 22/Junio/2006 Localización: Venezuela Estado: Sin conexión Puntos: 220 |
Enviado: 30/Septiembre/2020 a las 05:17 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gracias Ibanluz,
Con tu ayuda pude hacer que el evento Worksheet_Change funcione de maravilla Gracias AnSanVal. El código que me enviaste funciona muy bien. La macro completa, por si alguien está interesado en algo parecido, quedó de la siguiente manera: Private Sub Worksheet_Change(ByVal Target As Range) Dim celda As Range, filaU&, colD&, filaD& Application.EnableEvents = False Application.ScreenUpdating = False ActiveSheet.Range("J1").CurrentRegion.Clear filaU = Cells(Rows.Count, 1).End(xlUp).Row Range("CD2").FormulaR1C1 = "=IFERROR(9+MATCH(R[-1]C,R[-1]C[-72]:R[-1]C[-1],0),10+COUNTA(R[-1]C[-72]:R[-1]C[-1]))" For Each celda In Range("A1:A" & filaU).Cells Range("CD1").Value = celda.Value colD = Range("CD2").Value Cells(1, colD).Value = celda.Value filaD = Cells(Rows.Count, colD).End(xlUp).Row + 1 Cells(filaD, colD).Value = celda.Offset(0, 1).Value Next celda Range("CD1:CD2").ClearContents Application.EnableEvents = True Application.ScreenUpdating = True End Sub Funciona si elimino/cambio algún alumno. También, si agrego una materia diferente. Muy, pero muy agradecido a todos Por mi parte se puede cerrar el hilo Gracias Gladiador
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5970 |
Enviado: 30/Septiembre/2020 a las 12:27 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Veo que cada vez que añades (o borras) una asignatura se borran todos
los datos que ya tienes y se escriben de nuevo, y al escribir (o borrar) el
alumno otro tanto de lo mismo (no es muy eficiente). Pero como suele decirse por aquí «si funciona no lo cambies». - [Aunque
yo trabajaría sólo con las modificaciones, sin borrar reescribir los datos ya
pasados, pero eso sí; ¡Complicaría
más el código VBA!: habría que trabajar, además de con Worksheet_Change, con Worksheet_SelectionChange para
identificar cuando modificas una celda vacía (estás agregando) o cuando
modificas una celda con texto (estás borrando o modificando), en este
evento se tendría que ‘memorizar’ los contenidos de la pareja de celdas]. Tal como lo tienes y sin complicar demasiado el código VBA; con lo resaltado en (rojo)… Private Sub Worksheet_Change(ByVal Target As Range) Dim celda As Range, filaU&,
colD&, filaD&, A As Boolean, B As Boolean
A = Cells(Target.Row, 1).Value = "": B = Cells(Target.Row,
2).Value = ""
If A <> B Then Exit Sub Application.EnableEvents = False Application.ScreenUpdating =
False
ActiveSheet.Range("J1").CurrentRegion.Clear filaU = Cells(Rows.Count,
1).End(xlUp).Row
Range("CD2").FormulaR1C1 =
"=IFERROR(9+MATCH(R[-1]C,R[-1]C[-72]:R[-1]C[-1],0),10+COUNTA(R[-1]C[-72]:R[-1]C[-1]))" For Each celda In
Range("A1:A" & filaU).Cells Range("CD1").Value =
celda.Value colD =
Range("CD2").Value Cells(1, colD).Value =
celda.Value filaD = Cells(Rows.Count,
colD).End(xlUp).Row + 1 Cells(filaD, colD).Value =
celda.Offset(0, 1).Value Next celda
Range("CD1:CD2").ClearContents Application.EnableEvents = True Application.ScreenUpdating =
True End Sub
… sólo ejecutas el código cuando agregas/borras asignatura y
alumno, y no cuando modificas sólo uno de ellos (al menos evitas el 50% de escrituras
y borrados).
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Saludos desde Tenerife.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |