Pasar datos de filas a columnas

Hola a todos y gracias por anticipado.

Tengo una hoja de excel tal que las dos primeras filas que se ven en la imagen. Intento hallar la fórmula para que los datos queden tal y como se ve a partir de la fila 7. O sea, crear una fila por cada jugador y entrenador.

En la tabla original los jugadores llegan hasta J29 (columna AJ) y hay más de 1000 filas, por lo que mejor si se creara la 'nueva tabla" en otra hoja.

Espero que se entienda lo que quiero hacer, aunque me temo que sea algo laborioso.

1 respuesta

Respuesta
1

Prueba la siguiente macro.

Tu información en la hoja "Datos" empezando en la celda A1. El resultado en la hoja "Resultado".

Sub Pasar_datos_de_filas_a_columnas()
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long, k As Long, m As Long, lr As Long, lc As Long
  '
  a = Sheets("Datos").Range("A1").CurrentRegion.Value
  ReDim b(1 To UBound(a, 1) * 8, 1 To 9)
  '
  For i = 2 To UBound(a, 1)
    For j = 8 To UBound(a, 2)
      If a(i, j) <> "" Then
        k = k + 1
        For m = 1 To 7
          b(k, m) = a(i, m)
        Next
        b(k, 8) = a(i, j)
        b(k, 9) = IIf(LCase(Left(a(1, j), 1)) = "E", "Entrenador", "Jugador")
      End If
    Next
  Next
  Sheets("Resultado").Range("A2").Resize(UBound(b, 1), UBound(b, 2)).Value = b
End Sub

Hola, gracias por la respuesta y perdón por el retraso en contestar.

La macro, para el ejemplo que envié, funciona perfectamente.

Sin embargo, he añadido una columna más (la C) y  me interesaría que se ampliara la selección ya que los jugadores van de J1 a J29 (de la columna I a la AK) y el entrenador está en la columna AL (en el ejemplo que puse simplifiqué el número de columnas). Si pongo más de 11 columnas de jugadores la macro tira un error y no sé exactamente dónde habría que meterle mano para corregir la macro.

También ocurre que en la hoja "Resultado" tanto los jugadores como los entrenadores aparecen en la columna I como Jugador (lo suyo sería que apareciera como Jugador o Entrenador según corresponda).

Gracias por su tiempo y perdón por las correcciones.

Intenté hacerlo más flexible, para que aumentes o quites columnas.

Solamente llena las letras de las columnas en estas líneas:

  colini = "I"    'columna inicial de jugadores
  colent = "AL"   'columna entrenador

.--------

Sub Pasar_datos_de_filas_a_columnas()
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long, k As Long, m As Long
  Dim colini As String, colfin As String, colent As String
  Dim c1 As Long, c3 As Long, n1 As Long, n2 As Long
  '
  colini = "I"    'columna inicial de jugadores
  colent = "AL"   'columna entrenador
  '
  With Sheets("Datos")
    c3 = Columns(colent).Column
    a = .Range("A1", .Cells(.Range("A" & Rows.Count).End(3).Row, c3)).Value
  End With
  c1 = Columns(colini).Column
  n1 = c3 - c1 + 1
  n2 = c1 + 1
  ReDim b(1 To UBound(a, 1) * n1, 1 To n2)
  '
  For i = 2 To UBound(a, 1)
    For j = c1 To UBound(a, 2)
      If a(i, j) <> "" Then
        k = k + 1
        For m = 1 To c1 - 1
          b(k, m) = a(i, m)
        Next
        b(k, c1) = a(i, j)
        b(k, c1 + 1) = IIf(j < c3, "Jugador", "Entrenador")
      End If
    Next
  Next
  With Sheets("Resultado")
    .Rows("2:" & Rows.Count).ClearContents
    .Range("A2").Resize(k, UBound(b, 2)).Value = b
  End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas