Como posso dividir os dados do Excel de 1 coluna em 8 colunas, mantendo os dados em uma ordem específica?

4

Eu preciso manter a ordem dos dados. Então, para explicar eu preciso mover os dados da célula

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

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

Enxague e repita até que eu tenha passado por todas as 24 mil entradas na coluna A

Certamente há uma maneira fácil de conseguir isso via macro ou vba? Talvez talvez um recurso nas versões mais recentes já possa fazer isso?

    
por Ralph 16.08.2012 / 16:24

3 respostas

2

Aqui está uma solução do 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
    
por 16.08.2012 / 17:14
2

Aqui está uma solução. Assume o seguinte:

  1. Todos os dados originais estão na coluna A
  2. A coluna B contém apenas o índice da linha

Fórmula: em =INDIRECT(CONCATENATE("a",$B2*8 + col_offset)) , em que col_offset é o número da coluna (zero indexado). Então, na primeira coluna, seria =INDIRECT(CONCATENATE("a",$B2*8)) e na 8ª coluna seria =INDIRECT(CONCATENATE("a",$B2*8+7)) .

Uma foto para deixar as coisas mais claras:

Editar:Novafórmula:=INDIRECT(CONCATENATE("a",(ROW()-2)*8+(COLUMN()-3))) em que -2 e -3 são deslocamentos de linhas e colunas. Basta colar isso em todas as células em que você deseja que seus dados apareçam. (esta solução é melhor porque a coluna B agora pode ser excluída)

    
por 16.08.2012 / 16:42
0

As respostas do VBA são as melhores para lidar com uma grande quantidade de dados, mas vou salientar que você também pode fazer isso através de copiar / colar usando "Transpose". É uma solução fácil de clicar com o botão direito para pequenas necessidades. Isso se aplica a 2010 com certeza e acredito em 2007 também.

Parece que eu não consigo fazer imagens ainda ...

  • Copie suas células verticalmente
  • Clique com o botão direito do mouse em outra célula e use a quarta opção em "Opções de colagem" (parece dois retângulos azuis em ângulos retos)

Mais rápido em algumas circunstâncias.

    
por 18.08.2012 / 00:05