Come "unpivot" o "reverse pivot" in Excel?


66

Ho dei dati che assomigliano a questo:

Id | Loc1 | Loc2 | Loc3 | Loc4
---+------+------+------+-----
1  | NY   | CA   | TX   | IL
2  | WA   | OR   | NH   | RI

E voglio convertirlo in questo:

Id | LocNum | Loc
---+--------+----
1  |   1    | NY
1  |   2    | CA
1  |   3    | TX
1  |   4    | IL
2  |   1    | WA
2  |   2    | OR
2  |   3    | NH
2  |   4    | RI

Qual è il modo più semplice per farlo in Excel 2007?


Risposte:


69

Puoi farlo con una tabella pivot.

  1. Creare una "Tabella pivot di intervalli di consolidamento multipli". (Solo su Creazione guidata tabella pivot. Richiama con ALT+ D, Psu Excel 2007)
  2. Seleziona "Creerò i miei campi pagina".
  3. Seleziona i tuoi dati.
  4. Fai doppio clic sul valore totale generale, quello all'intersezione tra Riga Grand e Colonna Grand , fino all'angolo in basso a destra della tabella pivot.

Dovresti vedere un nuovo foglio contenente tutti i dati nella tua tabella pivot, trasposti nel modo che stai cercando.

Le tecnologie Datapig forniscono istruzioni dettagliate che in realtà sono più complicate del necessario: il suo esempio traspone solo una parte del set di dati e utilizza la tecnica pivot combinata con TextToColumns . Ma ha molte foto.

Si noti che una tabella pivot raggrupperà i dati. Se lo vuoi separare, l'unico modo per farlo è copiare la tabella pivot e "incollare speciali" come valori. È quindi possibile riempire gli spazi vuoti con una tecnica come questa: http://www.contextures.com/xlDataEntry02.html


Grazie per la tua risposta, ma non sono sicuro di quello che stai dicendo qui. Per l'esempio della mia domanda, cosa dovrei usare per etichette di riga, etichette di colonna, valori e filtro report?
Devuxer

Se inserisco Id in Etichette di riga e da Loc1 a Loc4 in Etichette di colonna, quindi faccio clic sulla cella in basso a destra (l'intersezione dei totali complessivi), crea un nuovo foglio con una tabella, ma non è quello che voglio. Fondamentalmente è solo una copia della normale tabella pivot.
Devuxer

Mi dispiace - ho lasciato fuori un dato critico. La tabella pivot deve essere una tabella pivot di tipo "intervallo di consolidamento multiplo", anche se in questo caso non è necessario consolidare nulla.
DaveParillo,

4
Ah okay, l'ho cercato nella guida e ho trovato un modo back-door per ottenere la vecchia procedura guidata Tabella pivot in Excel 2007 (è necessario premere ALT + D + P). Ora sono in grado di seguire i tuoi passi e sembra funzionare. Grazie per l'aiuto!
Devuxer


7

Se i tuoi dati non sono una tabella pivot di Excel ma solo dati, potresti voler "annullare il pivot" con un semplice codice VBA. Il codice dipende da due intervalli denominati, Origine e Destinazione. La fonte è i dati che si desidera annullare il pivot (ad esclusione delle intestazioni di colonna / riga, ad esempio NY-RI nel campione) e Target è la prima cella in cui si desidera posizionare il risultato.

Sub unPivot()
Dim oTarget As Range
Dim oSource As Range
Dim oCell As Range

Set oSource = Names("Source").RefersToRange
Set oTarget = Names("Target").RefersToRange

For Each oCell In oSource
    If oCell.Value <> "" Then
        oTarget.Activate
      ' get the column header
        oTarget.Value = oCell.Offset(-(oCell.Row - oSource.Row + 1), 0).Text 
      ' get the row header
         oTarget.Offset(0, 1).Value = oCell.Offset(0, _
           -(oCell.Column - oSource.Column + 1)).Text 
      ' get the value
        oTarget.Offset(0, 2).Value = oCell.Text 
      ' move the target pointer to the next row
        Set oTarget = oTarget.Offset(1, 0) 
    End If
Next
Beep
End Sub

1
Grazie per questo. Funziona come da eccezione e mi fa risparmiare un sacco di tempo.
Tigrou,

Grazie!! questa è solo magia! molto meglio di jigiry-pokery con rapporti impercettibili che non hanno mai funzionato per me
trailmax,

1
Sembra fantastico, ma come meglio posso dire, funzionerà solo per una tabella che ha solo un'intestazione di riga. Se la tabella nell'esempio avesse più intestazioni di riga, supponiamo che avesse un "SubId" oltre al campo Id, questo non funzionerebbe. C'è un modo semplice per modificarlo in modo che funzioni in questa situazione?
Chris Stocking,


4

C'è una buona soluzione in Excel 2010, basta giocare un po 'con il tavolo pivot.

Crea una tabella pivot dai tuoi dati con queste impostazioni:

  • nessun totale parziale, nessun totale generale
  • layout report: modulo tabulare, ripetere tutte le etichette degli articoli
  • aggiungi tutte le colonne di cui hai bisogno, mantieni le colonne che vuoi trasformare a destra
  • per ogni colonna che vuoi trasformare: apri le impostazioni del campo - nella scheda layout e stampa: seleziona "Mostra etichette degli articoli in forma di contorno" e seleziona entrambe le caselle di controllo sottostanti
  • copia la tua tabella in una posizione separata (solo valori)
  • se hai celle vuote nei dati originali, filtra i valori vuoti nella colonna più a destra ed elimina quelle righe (non filtrare nella tabella pivot in quanto non funzionerà di cui hai bisogno!)

1
Questa è sicuramente la risposta migliore se sei nel 2010 e non è affatto ovvia nell'interfaccia. Grande scoperta - purtroppo ho un solo voto!
jkf,

3

La cosa migliore che ho trovato finora è questa:

Id   LocNum  Loc
---------------------------------
1    1       =INDEX(Data,A6,B6)
1    2       =INDEX(Data,A7,B7)
1    3       =INDEX(Data,A8,B8)
1    4       =INDEX(Data,A9,B9)
2    1       =INDEX(Data,A10,B10)
2    2       =INDEX(Data,A11,B11)
2    3       =INDEX(Data,A12,B12)
2    4       =INDEX(Data,A13,B13)

Funziona, ma devo generare manualmente gli ID e LocNum. Se esiste una soluzione più automatizzata (oltre a scrivere una macro), per favore fatemi sapere in una risposta separata.


2

Se le dimensioni dei tuoi dati sono come nell'esempio fornito nella tua domanda, la seguente serie di formule che usano OFFSET dovrebbe darti il ​​risultato richiesto:

assumendo

1 | NY | CA | TX | I L

2 | WA | O | NH | RI

sono nell'intervallo A2: E3, quindi inserire

= OFFSET ($ A $ 2, PIANO ((ROW (A2) -ROW ($ A $ 2)) / 4,1), 0)

in F2, diciamo, e

= MOD (ROW (A2) -ROW ($ A $ 2), 4) +1

in G2, diciamo, e

= OFFSET ($ B $ 2 PIANO ((ROW (B2) -ROW ($ B $ 2)) / 4,1), MOD (ROW (A2) -ROW ($ A $ 2), 4))

in H2, diciamo.

Quindi copia queste formule verso il basso per quanto necessario.

Questa è la soluzione formula più semplice, pura e integrata che mi viene in mente.


1

Sembra che tu abbia ottenuto la colonna "loc" (evidenziata dalla tua prima risposta), e ora hai bisogno di aiuto per ottenere le altre due colonne.

La tua prima opzione è semplicemente digitare le prime diverse (diciamo, 12) righe in quelle colonne e trascinare verso il basso - penso che Excel faccia la cosa giusta in questo caso (non ho Excel su questo computer per testarlo di sicuro).

Se non funziona o se vuoi qualcosa di più programmatore-y, prova a utilizzare la funzione row (). Qualcosa come "= Floor (row () / 4)" per la colonna ID e "= mod (row (), 4) +1" per la colonna LocNum.



1

Ecco uno strumento utile per annullare la rotazione, normalizzare una tabella pivot.

Normalisieren von Pivot Tabellen

Spero possa essere d'aiuto.


1
Benvenuto in SuperUser! Mentre lo strumento a cui sei collegato offre una soluzione, questo post è utile solo finché il collegamento rimane attivo. Per assicurarti che il tuo post rimanga utile anche in futuro, modifica la tua risposta per includere eventuali informazioni aggiuntive sul prodotto, incluso come usarlo per risolvere il problema descritto nella domanda. Grazie!
Eccellente

1

La risposta @DaveParillo è la risposta migliore per una tabella a scheda singola. Volevo aggiungere alcuni extra qui.

Per più colonne prima delle colonne non pivot

Questo metodo non funziona.

Youtube non distribuisce dati semplici come la domanda

Questo è un video di YouTube che mostra come farlo in modo semplice. Ho saltato la parte sull'aggiunta del collegamento e ho usato il collegamento @devuxer che si trova nella risposta DaveParillo.

https://www.youtube.com/watch?v=pUXJLzqlEPk


3
La sostanza della tua risposta è un collegamento a un video e il contenuto non è descritto. Se il collegamento si interrompe o non è disponibile, la risposta non avrebbe alcun valore. Includere le informazioni essenziali nella risposta e utilizzare il collegamento solo per l'attribuzione e ulteriori esplorazioni.
fixer1234

-2

È molto più semplice di così. Fai clic sull'opzione "Trasponi" in "Incolla speciale ..." per ottenere la trasposizione che stai richiedendo.


1
Questo non funzionerebbe.
zx8754,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.