macro

19/07/2012 - 14:27 por iejjfh | Informe spam
Buenos días colabores de este grupo, les escribo para solicitar ayuda en la elaboración de un macro o en una solución para automatizar el siguiente caso:
Tengo un libro con las listas de estudiantes del colegio en el que trabajo, cada hoja tiene dos columnas una con el número de lista y la otra con el nombre del estudiante, tengo que insertar una fila debajo de cada nombre de estudiante, dejar el espacio para digitar al frente de cada estudiante el nombre del padre y debajo el nombre de la madre, ahora combinar las celdas del numero para que quede ocupando las dos celdas (la que tenia mas la insertada) y centrar verticalmente el número, lo mismo debo hacer con el nombre del estudiante de tal forma que queda centrado respecto a los nombres de los padres.
Gracias por la ayuda que me puedan ofrecer.
Originalmente las listas aparecen así:
1 ALVARADO PRADA KEVIN ANDREY
2 ANDRADE RODRIGUEZ OSCAR DANIEL
3 BARBOSA PEREZ ERIKA VANESSA
4 COBALEDA LLANOS MARLON ENRIQUE

Y deben quedar así:


________________________________________________________
| | | |
|1 | ALVARADO PRADA KEVIN ANDREY |-|
|__|________________________________|___________________|
| | | |
|2 | ANDRADE RODRIGUEZ OSCAR DANIEL |-|
|__|________________________________|___________________|
| | | |
|3 | COBALEDA LLANOS MARLON ENRIQUE |-|
|__|________________________________|___________________|

Preguntas similare

Leer las respuestas

#1 iejjfh
23/07/2012 - 00:10 | Informe spam
El jueves, 19 de julio de 2012 07:27:02 UTC-5, escribió:
Buenos días colabores de este grupo, les escribo para solicitar ayuda en la elaboración de un macro o en una solución para automatizar el siguiente caso:
Tengo un libro con las listas de estudiantes del colegio en el que trabajo, cada hoja tiene dos columnas una con el número de lista y la otra con el nombre del estudiante, tengo que insertar una fila debajo de cada nombre de estudiante, dejar el espacio para digitar al frente de cada estudiante el nombre del padre y debajo el nombre de la madre, ahora combinar las celdas del numero para que quede ocupando las dos celdas (la que tenia mas la insertada) y centrar verticalmente el número, lo mismo debo hacer con el nombre del estudiante de tal forma que queda centrado respecto a los nombres de los padres.
Gracias por la ayuda que me puedan ofrecer.
Originalmente las listas aparecen así:
1 ALVARADO PRADA KEVIN ANDREY
2 ANDRADE RODRIGUEZ OSCAR DANIEL
3 BARBOSA PEREZ ERIKA VANESSA
4 COBALEDA LLANOS MARLON ENRIQUE

Y deben quedar así:


________________________________________________________
| | | |
|1 | ALVARADO PRADA KEVIN ANDREY |-|
|__|________________________________|___________________|
| | | |
|2 | ANDRADE RODRIGUEZ OSCAR DANIEL |-|
|__|________________________________|___________________|
| | | |
|3 | COBALEDA LLANOS MARLON ENRIQUE |-|
|__|________________________________|___________________|



Hola por favor alguien que me colabore, por ejemplo Hector Miguel, gracias, realmente es importante solucionar esto.
Respuesta Responder a este mensaje
#2 Pedro F. Pardo
23/07/2012 - 22:48 | Informe spam
Hola,
Prueba a copiar esta macro en un modulo y ejecútala.

Es Importante que selecciones la primera fila donde quieres empezar a insertar las líneas. En caso de que el fichero tenga una cabecera, esta fila será la segunda.

También es importante saber que lo que haga la macro no se puede deshacer.
Guarda el fichero antes de ejecutar la macro.

Espero que te sea de ayuda.

Saludos,
Pedro



Sub Macro_Realinea()
'
' Esta macro supone que el número está en la columna A y el nombre en la columna
' B
' Comienza en la celda Activa de modo que antes de ejecutarla selecciona el
' primer número Fila 1 o fila 2 dependiendo
' de donde esté el primer nombre.
' Sigue funcionando mientras haya números en la columna A.
' Si hay un hueco vacío en la columna A se detendrá

' En ese caso puedes seleccionar la siguiente línea donde haya algún número y
'volver a ejecutar la macro.
' Lo que hacen las macros no se puede deshacer de modo que GUARDA justo antes de
'ejecutar la macro.
' Si algo sale mal siempre podrás cerrar sin guardar y volver a abrir el fichero
'tal y como estaba antes de la macro.

' Espero que te sirva.



n = ActiveCell.Row
Do While Range("A" & 2 * n - 1).Value <> ""

Rows(2 * n & ":" & 2 * n).Select 'Selecciona la fila correspondiente
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'Inserta

Range("A" & 2 * n - 1 & ":A" & 2 * n).MergeCells = True 'Mezcla número
Range("A" & 2 * n - 1 & ":A" & 2 * n).VerticalAlignment = xlCenter 'Alinea número

Range("B" & 2 * n - 1 & ":B" & 2 * n).MergeCells = True 'Mezcla nombre
Range("B" & 2 * n - 1 & ":B" & 2 * n).VerticalAlignment = xlCenter 'Alinea nombre

n = n + 1 'Siguente línea
Loop

End Sub




El domingo, 22 de julio de 2012 23:10:35 UTC+1, escribió:
El jueves, 19 de julio de 2012 07:27:02 UTC-5, escribió:
&gt; Buenos días colabores de este grupo, les escribo para solicitar ayuda en la elaboración de un macro o en una solución para automatizar el siguiente caso:
&gt; Tengo un libro con las listas de estudiantes del colegio en el que trabajo, cada hoja tiene dos columnas una con el número de lista y la otra con el nombre del estudiante, tengo que insertar una fila debajo de cada nombre de estudiante, dejar el espacio para digitar al frente de cada estudiante el nombre del padre y debajo el nombre de la madre, ahora combinar las celdas del numero para que quede ocupando las dos celdas (la que tenia mas la insertada) y centrar verticalmente el número, lo mismo debo hacer con el nombre del estudiante de tal forma que queda centrado respecto a los nombres de los padres.
&gt; Gracias por la ayuda que me puedan ofrecer.
&gt; Originalmente las listas aparecen así:
&gt; 1 ALVARADO PRADA KEVIN ANDREY
&gt; 2 ANDRADE RODRIGUEZ OSCAR DANIEL
&gt; 3 BARBOSA PEREZ ERIKA VANESSA
&gt; 4 COBALEDA LLANOS MARLON ENRIQUE
&gt;
&gt; Y deben quedar así:
&gt;
&gt;
&gt; ________________________________________________________
&gt; | | | |
&gt; |1 | ALVARADO PRADA KEVIN ANDREY |-|
&gt; |__|________________________________|___________________|
&gt; | | | |
&gt; |2 | ANDRADE RODRIGUEZ OSCAR DANIEL |-|
&gt; |__|________________________________|___________________|
&gt; | | | |
&gt; |3 | COBALEDA LLANOS MARLON ENRIQUE |-|
&gt; |__|________________________________|___________________|

Hola por favor alguien que me colabore, por ejemplo Hector Miguel, gracias, realmente es importante solucionar esto.
Respuesta Responder a este mensaje
#3 iejjfh
27/07/2012 - 16:39 | Informe spam
Buenos días gracias por tu amable respuesta, funciona casi perfecto solo que a los dos primeros nombres no les esta realizando el proceso, a partir del tercer dato lo realiza perfectamente; gracias por tu respuesta. Quisiera saber si es posible que me amplíes os comentarios para saber que realiza cada una de las instrucciones del macro. Nuevamente gracias
Respuesta Responder a este mensaje
#4 Pedro F. Pardo
27/07/2012 - 20:38 | Informe spam
On Friday, 27 July 2012 15:39:26 UTC+1, wrote:
Buenos días gracias por tu amable respuesta, funciona casi perfecto solo que a los dos primeros nombres no les esta realizando el proceso, a partir del tercer dato lo realiza perfectamente; gracias por tu respuesta. Quisiera saber si es posible que me amplíes os comentarios para saber que realiza cada una de las instrucciones del macro. Nuevamente gracias



Lo más complicado que tiene esta macro es saber en qué posición estás y donde se va a insertar la línea siguiente.

La hice suponiendo que no tenías cabecera es decir que el primer nombre estaría en la fila 1 y después la intenté hacer estandar para que funcionara desde cualquier punto. Obviamente no lo hice bien :-)

Al principio con
n = ActiveCell.Row
lo que hago es mirar qué celda está seleccionada y guardar ese valor en la variable n.

Todas las operaciones las vamos a hacer respecto a esa variable es la que lleva el control de donde estamos en cada momento.

Imagina que no tienes cabecera y que el primer nombre está en la primera línea y que has seleccionado la celda A1. En ese caso n valdrá 1.

Ahora comienza el bucle, todo lo que haya entre el Do While y el Loop se repetirá una y otra vez mientras se cumpla la condición de que la celda en la que nos encontremos tenga algo escrito.

Si n=1
la siguiente línea lo que hace es seleccionar la fila que hay justo debajo.

Rows(2 * n & ":" & 2 * n).Select 'Selecciona la fila correspondiente

Cuando n=1 se convierte en...
Rows("2:2").Select 'Que significa selecciona la segunda fila
Inserta una fila nueva (entre el primer nombre y el segundo, y desplaza todo hacia abajo)

a continuación selecciona las filas 1 y 2
Recuerda que n sigue valiendo 1 de modo que...
Range("A" & 2 * n - 1 & ":A" & 2 * n).MergeCells = True
Range("A" & 2 * n - 1 & ":A" & 2 * n).VerticalAlignment = xlCenter

se convierte en...
Range("A1:A2").MergeCells = True
Range("A1:A2").VerticalAlignment = xlCenter

Es decir mezcla las filas 1 y 2 columna A

Hace lo mismo con las filas 1 y 2 de la columna B
Range("B1:B2").MergeCells = True
Range("B1:B2").VerticalAlignment = xlCenter

Y lo siguiente es sumar 1 al valor de n.

Es decir ahora n valdrá 2 y volverá a repetir el Loop.

Irá insertando filas en los números pares,
2,4,6,8 e irá uniendo las celdas impares y la siguiente...
1y2
3y4
5y6
...


Así hasta que encuentre un hueco vacío.


El fallo que cometí es que pensé que daría igual si comenzaba en una celda par o impar :-( pero no es así.



Esta es la macro arreglada para que ajuste el contador n dependiendo si empezamos en una fila par o en una fila impar ;-)

Sub Macro_Realinea()
n = ActiveCell.Row
If 2 * Int((n / 2)) = n Then
Do While Range("A" & 2 * n - 2).Value <> ""

Rows(2 * n - 1 & ":" & 2 * n - 1).Select 'Selecciona la fila
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Range("A" & 2 * n - 2 & ":A" & 2 * n - 1).MergeCells = True 'Mezcla
Range("A" & 2 * n - 2 & ":A" & 2 * n - 1).VerticalAlignment = xlCenter

Range("B" & 2 * n - 2 & ":B" & 2 * n - 1).MergeCells = True 'Mezcla
Range("B" & 2 * n - 2 & ":B" & 2 * n - 1).VerticalAlignment = xlCenter

n = n + 1 'Siguente línea
Loop
Else
Do While Range("A" & 2 * n - 1).Value <> ""

Rows(2 * n & ":" & 2 * n).Select 'Selecciona la fila correspondiente
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Range("A" & 2 * n - 1 & ":A" & 2 * n).MergeCells = True 'Mezcla
Range("A" & 2 * n - 1 & ":A" & 2 * n).VerticalAlignment = xlCenter

Range("B" & 2 * n - 1 & ":B" & 2 * n).MergeCells = True 'Mezcla
Range("B" & 2 * n - 1 & ":B" & 2 * n).VerticalAlignment = xlCenter

n = n + 1 'Siguente línea
Loop
End If


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