Excel trasporte e organizza

Ho un sacco di righe, che voglio trasformare in un tavolo.

C'è un modo per Excel di convertire un gruppo di voci, ciascuna che occupa quattro righe in una tabella, in cui ognuna delle quattro righe viene inserita in una delle quattro colonne?

Fondamentalmente questo:

a b c d a b c d 

a

  abcd abcd 

Non mi sprofonda dalla testa che conosco un modo per farlo per tutti, ma puoi incollare così …

  • select un insieme di abcd
  • copiare le celle
  • modifica -> pasta speciale
  • [x] il button di trascinamento in basso

Ciò farà per THAT set di a / b / c / d. So che non è una risposta completa, ma se non ci sono troppi di questi, allora potrebbe funzionare.

Ecco una macro veloce che farà il transpose per te, se ti piace. Basta mettere tutto nella colonna "A" e metterà tutto in B1, C1, D1, ecc. Le righe sono delineate da spazi e due spazi in una row significa "stop".

fisso, dovrebbe funzionare bene per un massimo di 255 colonne. e sì, puoi usare l'impostazione Transpose nella function pastespecial in vba, ma questo rende il codice più complicato per lo stesso risultato, per cui ho mantenuto semplice

 Sub Macro1() lastBlank = False col = 2 'B row = 1 For Each cell In Range("A:A") v = Trim(CStr(cell)) If v = "" Then If lastBlank = True Then Exit For lastBlank = True col = 2 'B row = row + 1 Else Cells(row, col) = v col = col + 1 lastBlank = False End If Next End Sub 
  • Strumenti-> Macro-> Visual Basic Editor
  • [menu] Inserisci -> Modulo
  • Incolla la macro in (dovrebbe essere in 'Module1')
  • Run (freccia verde). O … chiudi e gli strumenti-> macro-> macro -> [run]

Se qualcuno sta leggendo ancora questo articolo del blog, ecco un altro modo per farlo (basta impostare in quale row il primo pezzo di dati è nell'utilizzo della costante di FirstRow e poi di svuotarlo) …

 Sub TransposeRowsFourAtATime() Dim X As Long, LastRow As Long, OffSetCounter As Long Const FirstRow As Long = 2 LastRow = Cells(Rows.Count, "A").End(xlUp).Row For X = FirstRow To LastRow Step 5 Cells(FirstRow, "A").Offset(OffSetCounter).Resize(1, 4) = _ WorksheetFunction.Transpose(Cells(X, "A").Resize(4)) OffSetCounter = OffSetCounter + 1 Next Range(Cells(FirstRow + OffSetCounter, "A"), Cells(LastRow, "A")).Clear End Sub 

Rick Rothstein (MVP – Excel)

Esiste una function di trasposizione eccellente. Digitare la function nella cella in cui si desidera avviare la trasposizione, quindi utilizzare le funzioni di modifica-> riempimento per copiare la function lateralmente (e giù se necessario).

Dovrebbe essere un modo per correggere l'indexing di row (per conto di spazi vuoti) utilizzando la function ADDRESS .

È ansible inserire queste formule (supponendo che i tuoi dati inizino in A1) e compilati per quanto necessario

 B1 =IF(ISBLANK(A5),A1,"") C1 =IF(ISBLANK(A5),A2,"") D1 =IF(ISBLANK(A5),A3,"") E1 =IF(ISBLANK(A5),A4,"") 

Poi copia e incolla valori speciali. Quindi ordinate per rimuovere le righe vuote.