¿Cómo puedo dividir los datos de Excel de 1 columna en 8 columnas manteniendo los datos en un orden específico?

¿Cómo puedo dividir los datos de Excel de 1 columna en 8 columnas manteniendo los datos en un orden específico?

Necesito mantener el orden de los datos. Entonces, para explicar, necesito mover los datos del celular.

a1 a b1,
a2 a c1,
a3 a d1,
a4 a e1,
a5 a f1,
a6 a g1,
a7 a h1,
a8 a i1,

a9 a B2
a10 a C2
a11 a D2
a12 a E2
a13 a F2
a14 a G2
a15 a H2
a16 a I2

Enjuague y repita hasta haber revisado las 24000 entradas de la columna A.

Ciertamente, existe una manera fácil de lograr esto mediante macro o vba. ¿Quizás una característica de las versiones más recientes ya podría hacer esto?

Respuesta1

Aquí hay una solución VBA:

Option Explicit
Private Sub ReArrangeCells()

  Dim ws As Worksheet, LastRow As Long
  Set ws = Excel.ActiveSheet

  LastRow = Range("A65536").End(xlUp).Row

  Dim i As Long, j As Long, FromCell As Range, ToCell As Range, sNewCol As String, sNewRow As String
  For i = 1 To LastRow

    Set FromCell = ws.Range("A" & i)                       'the cell we want to move
    sNewCol = IIf(i Mod 8 = 0, Chr$(72), Chr$((i Mod 8) + 64))
    sNewRow = IIf(i Mod 8 = 0, (i \ 8), (i \ 8) + 1)
    Set ToCell = ws.Range(sNewCol & sNewRow)               'the cell we want to copy the data to

    FromCell.Copy ToCell
    If i <> 1 Then FromCell.Clear

    If i Mod 100 = 0 Then DoEvents

  Next i

End Sub

Respuesta2

Aquí hay una solución. Se supone lo siguiente:

  1. Todos los datos originales están en la columna A.
  2. La columna B contiene solo el índice de la fila.

Fórmula: =INDIRECT(CONCATENATE("a",$B2*8 + col_offset))donde col_offset es el número de columna (indexada a cero). Entonces en la primera columna estaría =INDIRECT(CONCATENATE("a",$B2*8))y en la octava columna estaría =INDIRECT(CONCATENATE("a",$B2*8+7)).

Una imagen para aclarar las cosas:

ingrese la descripción de la imagen aquí

Editar:Nueva fórmula: =INDIRECT(CONCATENATE("a",(ROW()-2)*8+(COLUMN()-3)))donde -2y -3son desplazamientos de filas y columnas. Simplemente pegue esto en todas las celdas donde desea que aparezcan sus datos. (esta solución es mejor porque ahora se puede eliminar la columna B)

Respuesta3

Las respuestas de VBA son las mejores para manejar una gran cantidad de datos, pero señalaré que también puedes hacerlo copiando y pegando usando "Transponer". Es una solución sencilla con un clic derecho para necesidades pequeñas. Esto se aplica con seguridad a 2010 y creo que también a 2007.

Parece que tampoco puedo hacer imágenes todavía.

  • Copia tus celdas verticalmente
  • Haga clic derecho en otra celda y use la cuarta opción en "Opciones de pegado" (parece dos rectángulos azules en ángulo recto)

Más rápido en algunas circunstancias.

información relacionada