Macro excel para transponer datos alumnos

De momento el problema lo soluciono con transponer (en forma manual), sin embargo el numero de alumnos ha ido creciendo, y es muy largo, por lo que necesito una macro que lo haga automáticamente

La situación es la siguiente:

Tengo una planilla en hoja1 con los siguientes datos:

id_alumno nota1

12 5,5

12 4,5

12 6,0

15 3,2

15 6,8

17 4,5

y deseo transponer la información de modo que en otra hoja, quede

id_alumno nota1 nota2 nota3 .......

12 5,5 4,5 6,0

15 3,3 6,8

El id_alumno es único por alumno, el numero de notas es variable (entre 1 y 10 calificaciones)

Agradecido por vuestra gentileza

Fj

1 respuesta

Respuesta
1

Sigue las Instrucciones para un botón y ejecutar la macro
1. Abre tu libro de Excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la macro
5. Ahora para crear un botón, puedes hacer lo siguiente:
6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona Asignar macro / Selecciona: transponer_alumnos
9. Aceptar.
10. Para ejecutarla dale click a la imagen.

Sub transponer_alumnos()
'por.dam
Set h1 = Sheets("Hoja1")
    h1.Select
    h1.Columns("A:B").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, _
        Header:=xlGuess, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Set h2 = Sheets("Hoja2")
    h2.Cells.Clear
    ant = h1.Range("A2")
    j = 2
    k = 2
    h2.Cells(j, 1) = ant
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row + 1
        If ant = h1.Cells(i, "A") Then
            h2.Cells(j, k) = h1.Cells(i, "B")
            k = k + 1
        Else
            j = j + 1
            k = 2
            h2.Cells(j, 1) = h1.Cells(i, "A")
            h2.Cells(j, k) = h1.Cells(i, "B")
            k = k + 1
        End If
        ant = h1.Cells(i, "A")
    Next
MsgBox "Transponer Alumnos Terminado", vbInformation, "TRANPONER Por.DAM"
End Sub

Indicaciones:

1. Los títulos deben estar en la fila 1 en las columnas A y B

2. Los alumnos empiezan en la celda A2

3. La macro ordena las columnas A y B, por la columna A de menor a mayor, para poder trasponerlos

4. Los alumnos están en la hoja1 y los pasa a la hoja2

Prueba en un libro nuevo, con las indicaciones y me comentas

Saludos. Dam
Si es lo que necesitas.

Funciona a la perfección

excelente trabajo

la programación perfecta, es fácil de seguir y ademas aprender

Muchísimas gracias DAM

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas