Prueba la siguiente:
Sub Repetir_Filas()
'Declaración de variables
Dim a As Variant, i As Long, j As Long, k As Long
Dim lr As Long, lc As Long
'
With Sheets("Hoja1")
'obtiene la última fila con datos de la columna C
lr = .Range("C" & Rows.Count).End(3).Row
'obtiene la última columna con datos de la fila 1
lc = .Cells(1, Columns.Count).End(1).Column
a = .Range("C2", .Cells(lr, lc)).Value2
End With
'
'Redimensiona el arreglo 'b' para almacenar los resultados
'va desde la fila 1 hasta la ultima fila * el número de columnas
'y de 1 a 5 columnas
'si tienes 5 filas y 3 columnas, entonces el arreglo posiblemente
'tendrá 15 filas por 5 columnas.
ReDim b(1 To UBound(a) * lc, 1 To 5)
'Ciclo para cada fila
For i = 1 To UBound(a, 1)
'Ciclo de la columna 5 hasta la última columna
'la columna 1 es la columna C
'la columna 5 es la columna G donde empiezan las marcas
'por eso el ciclo empieza en 5
For j = 5 To lc - 2
'si marca de la fila columna es diferende de vacío entonces lo guarda en el arregl
If a(i, j) <> "" Then
k = k + 1
b(k, 1) = a(i, 1)
b(k, 2) = a(i, 2)
b(k, 3) = a(i, 3)
b(k, 4) = a(i, 4)
b(k, 5) = a(i, j)
End If
Next
Next
With Sheets("Hoja2")
'limpia las columnas
.Range("A:E").ClearContents
'pone encabezados
.Range("A1:D1").Value = Sheets("Hoja1").Range("C1:F1").Value
'pone el arreglo b en la hoja2 empezando en la celda a2
'cambie el tamaño al número de filas alcanzadas en la variable k y 5 columnas
.Range("A2").Resize(k, 5).Value = b
End With
End Sub
Dante Amor podrías ayudarme con una de ultimas preguntas que hice por favor. - Franco Chavez