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

4

Necesito mantener el orden de los datos. Entonces, para explicar, necesito mover los datos de la celda

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 que haya revisado todas las 24000 entradas en la columna A

¿Ciertamente hay una manera fácil de lograr esto a través de macro o vba? ¿Tal vez una característica en las versiones más recientes ya podría hacer esto?

Ralph
fuente
Traté de publicar fotos de lo que estoy haciendo, pero no tengo suficientes "puntos" en el foro para hacerlo: S
Ralph

Respuestas:

2

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
wbeard52
fuente
Esto funcionó de maravilla muchas gracias!
Ralph
2

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: en =INDIRECT(CONCATENATE("a",$B2*8 + col_offset))donde col_offset es el número de columna (indexado a cero). Entonces en la primera columna sería =INDIRECT(CONCATENATE("a",$B2*8))y en la octava columna serí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 el -2y -3son los desplazamientos de fila y columna. Simplemente pegue esto en todas las celdas donde desea que se muestren sus datos. (esta solución es mejor porque la columna B ahora se puede eliminar)

soandos
fuente
@Ralph por favor avíseme si hay algún problema. Trabajando para limpiarlo un poco ahora.
soandos
Lo hago funcionar para los primeros 8 (a1 a a8) ¡Pero cómo hago que funcione más allá de eso? Traté de arrastrar el relleno automático hacia abajo y eso me dio un error de tipo de datos incorrecto. Debo estar haciendo algo mal o no entender.
Ralph
Vea la edición para una nueva fórmula, pero Ctrl + D debería funcionar bien (debe hacer toda la fila de una vez con la fórmula anterior), con la nueva no importa
Comandos
Nuevamente, gracias por la solución. No pude descubrir cómo hacerlo funcionar, pero estoy seguro de que es porque no estoy haciendo algo bien.
Ralph
0

Las respuestas de VBA son las mejores para manejar una gran cantidad de datos, pero señalaré que también puede hacerlo a través de copiar / pegar usando "Transponer". Es una solución fácil de hacer clic con el botón derecho para pequeñas necesidades. Esto se aplica a 2010 con seguridad y creo que 2007 también.

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.

Andy Raddatz
fuente