Bagaimana cara "unpivot" atau "reverse pivot" di Excel?

66

Saya memiliki data yang terlihat seperti ini:

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

Dan saya ingin mengubahnya menjadi ini:

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

Apa cara termudah untuk melakukan ini di Excel 2007?

penjahat
sumber
1
Ditemukan jawabannya: stackoverflow.com/questions/32115219/…
Quandary

Jawaban:

69

Anda bisa melakukan ini dengan tabel pivot.

  1. Buat "Beberapa Konsolidasi Rentang PivotTable." (Hanya di Pivot Table Wizard. Panggilan dengan ALT+ D, Pdi Excel 2007)
  2. Pilih "Saya akan membuat bidang halaman saya sendiri".
  3. Pilih data Anda.
  4. Klik dua kali pada nilai total grand - yang ada di persimpangan Row Grand dan Column Grand , sepanjang jalan di sudut kanan bawah tabel pivot Anda.

Anda akan melihat lembar baru yang berisi semua data di tabel pivot Anda, ditransformasikan dengan cara yang Anda cari.

Teknologi Datapig menyediakan petunjuk langkah demi langkah yang sebenarnya lebih rumit dari yang Anda butuhkan - contohnya mentranspos hanya sebagian dari kumpulan data & menggunakan teknik pivot yang dikombinasikan dengan TextToColumns . Tetapi memang memiliki banyak gambar.

Perhatikan bahwa tabel pivot akan mengelompokkan data. Jika Anda menginginkannya tidak dikelompokkan, satu-satunya cara untuk melakukannya adalah menyalin tabel pivot, dan "menempelkan khusus" sebagai nilai. Anda kemudian dapat mengisi bagian yang kosong dengan teknik seperti ini: http://www.contextures.com/xlDataEntry02.html

DaveParillo
sumber
Terima kasih atas jawaban Anda, tetapi saya tidak yakin apa yang Anda katakan di sini. Sebagai contoh dalam pertanyaan saya, apa yang akan saya gunakan untuk Label Baris, Label Kolom, Nilai, dan Filter Laporan?
devuxer
Jika saya memasukkan Id ke Label Baris dan Loc1 melalui Loc4 ke dalam Label Kolom, lalu klik sel kanan bawah (persimpangan Grand Total), itu membuat lembar baru dengan tabel, tetapi bukan itu yang saya inginkan. Ini pada dasarnya hanya salinan dari tabel pivot biasa.
devuxer
Maaf - saya meninggalkan sepotong data penting. Tabel pivot harus berupa tabel pivot tipe 'beberapa rentang konsolidasi', meskipun dalam hal ini Anda tidak perlu melakukan konsolidasi.
DaveParillo
4
Ah oke, saya mencarinya di bantuan dan menemukan cara pintu belakang untuk mendapatkan Pivot Table Wizard lama di Excel 2007 (Anda perlu menekan ALT + D + P). Sekarang saya bisa mengikuti langkah Anda, dan sepertinya berhasil. Terima kasih atas bantuan Anda!
devuxer
1
Begini caranya: stackoverflow.com/questions/32115219/…
Quandary
7

Jika data Anda bukan Excel Pivot Table tetapi hanya data, Anda mungkin ingin "un-pivot" dengan beberapa kode VBA sederhana. Kode tergantung pada dua rentang bernama, Sumber dan Target. Sumber adalah data yang ingin Anda batalkan-pivot (eksklusif header kolom / baris, misalnya NY-RI dalam sampel) dan Target adalah sel pertama tempat Anda ingin menempatkan hasil Anda.

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
TJMelrose
sumber
1
Terima kasih untuk ini. Bekerja seperti dikecualikan dan membuat saya menghemat banyak waktu.
tigrou
Terima kasih!! ini hanya sihir! jauh lebih baik daripada jigiry-pokery dengan laporan tidakivoting yang tidak pernah berhasil untuk saya
trailmax
1
Ini tampak hebat, tetapi yang terbaik yang bisa saya katakan, itu hanya akan berfungsi untuk Tabel yang hanya memiliki satu header baris. Jika tabel dalam contoh memiliki beberapa header baris, katakan itu memiliki "SubId" di samping bidang Id, ini tidak akan berfungsi. Apakah ada cara mudah untuk memodifikasinya sehingga akan berfungsi dalam situasi ini?
Chris Stocking
4

Ada solusi yang cukup bagus di excel 2010, hanya perlu bermain sedikit dengan tabel pivot.

Buat tabel pivot dari data Anda dengan pengaturan ini:

  • tidak ada subtotal, tidak ada total besar
  • tata letak laporan: formulir tabular, ulangi semua label item
  • tambahkan semua kolom yang Anda butuhkan, pertahankan kolom yang ingin Anda ubah di sebelah kanan
  • untuk setiap kolom yang ingin Anda ubah: buka pengaturan lapangan - dalam tata letak & tab cetak: pilih "Tampilkan label item dalam bentuk outline" dan centang kedua kotak centang di bawahnya
  • salin meja Anda ke lokasi terpisah (hanya nilai)
  • jika Anda memiliki sel kosong di data asli Anda, kemudian filter nilai kosong di kolom paling kanan dan hapus baris itu (jangan filter dalam tabel pivot karena tidak akan berfungsi seperti yang Anda butuhkan!)
Máté Juhász
sumber
1
Ini tentu merupakan jawaban terbaik jika Anda berada di tahun 2010 ke atas, dan sama sekali tidak jelas di antarmuka. Great ditemukan - sayangnya saya hanya punya satu upvote!
jkf
3

Yang terbaik yang saya buat sejauh ini adalah ini:

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)

Ini berfungsi, tetapi saya harus membuat Id dan LocNum secara manual. Jika ada solusi yang lebih otomatis (selain menulis makro), beri tahu saya jawaban yang terpisah.

penjahat
sumber
2

Jika dimensi data Anda seperti dalam sampel yang disediakan dalam pertanyaan Anda, maka kumpulan formula berikut yang menggunakan OFFSET akan memberi Anda hasil yang Anda inginkan:

Asumsi

1 | NY | CA | TX | IL

2 | WA | ATAU | NH | RI

berada di kisaran A2: E3, lalu masuk

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

di F2, katakanlah, dan

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

di G2, katakan, dan

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

dalam H2, katakanlah.

Kemudian salin formula ini sejauh yang diperlukan.

Ini adalah solusi formula termudah, murni, bawaan yang dapat saya pikirkan.

Aaa
sumber
1

Anda sepertinya mendapatkan kolom "loc" (dibuktikan dengan jawaban pertama Anda), dan sekarang Anda perlu bantuan untuk mendapatkan dua kolom lainnya.

Opsi pertama Anda adalah cukup mengetik beberapa baris pertama (katakanlah, 12) ke dalam kolom tersebut dan seret ke bawah - Saya pikir Excel melakukan hal yang benar dalam kasus ini (saya tidak memiliki excel di komputer ini untuk mengujinya dengan pasti).

Jika itu tidak berhasil, atau jika Anda menginginkan sesuatu yang lebih programmer-y, coba gunakan fungsi baris (). Sesuatu seperti "= Lantai (baris () / 4)" untuk kolom ID dan "= mod (baris (), 4) +1" untuk kolom LocNum.


sumber
1

Ada utilitas konversi VBA parametrik untuk melepaskan atau membalikkan data yang diputar kembali ke tabel database, silakan lihat

http://www.spreadsheet1.com/unpivot-data.html

Petros
sumber
1
Selamat Datang di Pengguna Super! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Peachy
1

Berikut ini adalah alat yang bagus untuk membuka kunci, menormalkan Tabel Pivot.

Normalisieren von Pivot Tabellen

Saya harap ini membantu.

L4a-Thompson
sumber
1
Selamat datang di SuperUser! Meskipun alat yang Anda tautkan menawarkan solusi, pos ini hanya berguna selama tautan itu tetap aktif. Untuk memastikan bahwa posting Anda tetap berguna di masa mendatang, harap edit jawaban Anda untuk memasukkan informasi tambahan tentang produk, termasuk cara menggunakannya untuk menyelesaikan masalah yang dijelaskan dalam pertanyaan. Terima kasih!
Excellll
1

@DaveParillo menjawab adalah jawaban terbaik untuk tabel tab tunggal. Saya ingin menambahkan beberapa tambahan di sini.

Untuk Banyak kolom sebelum kolom tidakivot

Metode ini tidak berfungsi.

Youtube unpivot data sederhana seperti pertanyaan

Ini adalah video youtube yang menunjukkan cara melakukannya dengan cara yang sederhana. Saya melewatkan bagian tentang menambahkan pintasan dan menggunakan pintasan @evuxer yang ada dalam jawaban DaveParillo.

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

BrinkDaDrink
sumber
3
Substansi jawaban Anda adalah tautan ke video dan kontennya tidak dijelaskan. Jika tautan rusak atau tidak tersedia, jawaban Anda tidak akan bernilai. Harap sertakan informasi penting dalam jawaban Anda dan gunakan tautan hanya untuk atribusi dan eksplorasi lebih lanjut.
fixer1234
-2

Jauh lebih sederhana dari ini. Cukup klik opsi "Transpose" di "Tempel Spesial ..." untuk mendapatkan transposisi yang Anda minta.

C Tyler
sumber
1
Ini tidak akan berhasil.
zx8754