Código VB Macro Expertos
Publicado por Jorge A. Glez. Cano (7 intervenciones) el 30/12/2009 00:22:25
HOJA1 (datos Origen)
CUENTA--NOMBRE--MATERIA--CALIFICACION
555551-----Juan Perez-----001-----9
555551-----Juan Perez-----002-----7
555551-----Juan Perez-----005-----8
555552-----Pedro Chavez-----001-----6
555552-----Pedro Chavez-----002-----9
555552-----Pedro Chavez-----005-----7
555558-----Ines Flores-----001-----10
555558-----Ines Flores-----002-----9
555558-----Ines Flores-----005-----10
HOJA2 (Nueva Base destino)
CUENTA--NOMBRE--(001)--(002)--(005)
555551-----Juan Perez-----9-----7-----8
555552-----Pedro Chavez-----6-----9----7
555558-----Ines Flores-----10-----9-----10
En la hoja1, los datos se tienen "como de forma Vertical", se repiten los "numeros de cuenta" y los "nombres"; como veo que es muy repetitivo,
La Macro que les pido ayuda, es para crear en la Hoja2, datos "de forma Horizontal", en donde no se tienen que repetir los "numeros de cuenta", ni los "nombres" y, las calificaciones se ajusten de acuerdo a las materias, vamos cada fila sería un registro.
Ahora bien, les pongo el código VB, pero sólo copia en la Hoja2 el primer registro. El segundo registro, es la misma cuenta, con diferente materia, pero no lo copia. Lo que necesito es poner en la Hoja2 un registro con todas las materias (y calificaciones) de cada cuenta con su nombre (como aparece en el ej. de Hoja2 de arriba):
Sub Copia_Regis()
Sheets("hoja1").Select
ActiveSheet.Range("a2").Activate
NoCta = ActiveCell.Offset(0, 0)
APaterno = ActiveCell.Offset(0, 1)
AMaterno = ActiveCell.Offset(0, 2)
Nombre = ActiveCell.Offset(0, 3)
Grupo = ActiveCell.Offset(0, 4)
materia = ActiveCell.Offset(0, 5)
CalifBim1 = ActiveCell.Offset(0, 6)
Faltas = ActiveCell.Offset(0, 7)
Asist = ActiveCell.Offset(0, 8)
Selection.Copy
' Me posiciono en la 2a. base
Sheets("hoja2").Select
ActiveSheet.Range("A1").Activate
'Busca la última celda con datos
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
ActiveCell.Offset(0, 0).Value = NoCta
ActiveCell.Offset(0, 1).Value = APaterno
ActiveCell.Offset(0, 2).Value = AMaterno
ActiveCell.Offset(0, 3).Value = Nombre
ActiveCell.Offset(0, 4).Value = Grupo
'Creo condicionales para saber a donde pertenece las
'calificaciones de acuerdo al No. de la Materia
'Pongo un contador en 0 paera la posicion de la celda
Posmateria = 0
If materia = 1400 Then
Posmateria = 5
End If
If materia = 1401 Then
Posmateria = 6
End If
If materia = 1402 Then
Posmateria = 7
End If
If materia = 1403 Then
Posmateria = 8
End If
If materia = 1404 Then
Posmateria = 9
End If
If materia = 1405 Then
Posmateria = 10
End If
If materia = 1406 Then
Posmateria = 11
End If
If materia = 1407 Then
Posmateria = 12
End If
If materia = 1408 Then
Posmateria = 13
End If
If materia = 1409 Then
Posmateria = 14
End If
If materia = 1410 Then
Posmateria = 15
End If
If materia = 1411 Then
Posmateria = 16
End If
If materia = 1412 Then
Posmateria = 17
End If
ActiveCell.Offset(0, Posmateria).Value = CalifBim1
ActiveCell.Offset(0, 18).Value = Faltas
ActiveCell.Offset(0, 19).Value = Asist
'Regresa a la Hoja de la 1a.BDatos
Sheets("hoja1").Select
' Regreso a la 1a. BD (Hoja1), y tengo que tomar la segunda fila y
' checo que sea el mismo No. de Cuenta, si es asi, copio los datos
' y de nuevo los tengo que poner en la Hoja2 (en la misma fila que
' le corresponde a la cuenta
End Sub
De antemano agradezco mucho su valiosa ayuda...
Jorge
CUENTA--NOMBRE--MATERIA--CALIFICACION
555551-----Juan Perez-----001-----9
555551-----Juan Perez-----002-----7
555551-----Juan Perez-----005-----8
555552-----Pedro Chavez-----001-----6
555552-----Pedro Chavez-----002-----9
555552-----Pedro Chavez-----005-----7
555558-----Ines Flores-----001-----10
555558-----Ines Flores-----002-----9
555558-----Ines Flores-----005-----10
HOJA2 (Nueva Base destino)
CUENTA--NOMBRE--(001)--(002)--(005)
555551-----Juan Perez-----9-----7-----8
555552-----Pedro Chavez-----6-----9----7
555558-----Ines Flores-----10-----9-----10
En la hoja1, los datos se tienen "como de forma Vertical", se repiten los "numeros de cuenta" y los "nombres"; como veo que es muy repetitivo,
La Macro que les pido ayuda, es para crear en la Hoja2, datos "de forma Horizontal", en donde no se tienen que repetir los "numeros de cuenta", ni los "nombres" y, las calificaciones se ajusten de acuerdo a las materias, vamos cada fila sería un registro.
Ahora bien, les pongo el código VB, pero sólo copia en la Hoja2 el primer registro. El segundo registro, es la misma cuenta, con diferente materia, pero no lo copia. Lo que necesito es poner en la Hoja2 un registro con todas las materias (y calificaciones) de cada cuenta con su nombre (como aparece en el ej. de Hoja2 de arriba):
Sub Copia_Regis()
Sheets("hoja1").Select
ActiveSheet.Range("a2").Activate
NoCta = ActiveCell.Offset(0, 0)
APaterno = ActiveCell.Offset(0, 1)
AMaterno = ActiveCell.Offset(0, 2)
Nombre = ActiveCell.Offset(0, 3)
Grupo = ActiveCell.Offset(0, 4)
materia = ActiveCell.Offset(0, 5)
CalifBim1 = ActiveCell.Offset(0, 6)
Faltas = ActiveCell.Offset(0, 7)
Asist = ActiveCell.Offset(0, 8)
Selection.Copy
' Me posiciono en la 2a. base
Sheets("hoja2").Select
ActiveSheet.Range("A1").Activate
'Busca la última celda con datos
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
ActiveCell.Offset(0, 0).Value = NoCta
ActiveCell.Offset(0, 1).Value = APaterno
ActiveCell.Offset(0, 2).Value = AMaterno
ActiveCell.Offset(0, 3).Value = Nombre
ActiveCell.Offset(0, 4).Value = Grupo
'Creo condicionales para saber a donde pertenece las
'calificaciones de acuerdo al No. de la Materia
'Pongo un contador en 0 paera la posicion de la celda
Posmateria = 0
If materia = 1400 Then
Posmateria = 5
End If
If materia = 1401 Then
Posmateria = 6
End If
If materia = 1402 Then
Posmateria = 7
End If
If materia = 1403 Then
Posmateria = 8
End If
If materia = 1404 Then
Posmateria = 9
End If
If materia = 1405 Then
Posmateria = 10
End If
If materia = 1406 Then
Posmateria = 11
End If
If materia = 1407 Then
Posmateria = 12
End If
If materia = 1408 Then
Posmateria = 13
End If
If materia = 1409 Then
Posmateria = 14
End If
If materia = 1410 Then
Posmateria = 15
End If
If materia = 1411 Then
Posmateria = 16
End If
If materia = 1412 Then
Posmateria = 17
End If
ActiveCell.Offset(0, Posmateria).Value = CalifBim1
ActiveCell.Offset(0, 18).Value = Faltas
ActiveCell.Offset(0, 19).Value = Asist
'Regresa a la Hoja de la 1a.BDatos
Sheets("hoja1").Select
' Regreso a la 1a. BD (Hoja1), y tengo que tomar la segunda fila y
' checo que sea el mismo No. de Cuenta, si es asi, copio los datos
' y de nuevo los tengo que poner en la Hoja2 (en la misma fila que
' le corresponde a la cuenta
End Sub
De antemano agradezco mucho su valiosa ayuda...
Jorge
Valora esta pregunta


0