วิธี "ยกเลิกการหมุน" หรือ "สลับย้อนกลับ" ใน Excel ได้อย่างไร


66

ฉันมีข้อมูลที่มีลักษณะเช่นนี้:

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

และฉันต้องการแปลงเป็น:

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

วิธีที่ง่ายที่สุดในการทำเช่นนี้ใน Excel 2007 คืออะไร


คำตอบ:


69

คุณสามารถทำได้ด้วยตารางเดือย

  1. สร้าง "ช่วงของการรวมหลาย PivotTable" (เฉพาะใน Pivot Table Wizard. Callup กับALT+ D, Pใน Excel 2007)
  2. เลือก "ฉันจะสร้างฟิลด์หน้าของตัวเอง"
  3. เลือกข้อมูลของคุณ
  4. ดับเบิลคลิกที่มูลค่ารวมทั้งหมด - อันที่จุดตัดของRow GrandและColumn Grandไปจนถึงมุมขวาล่างของตารางเดือยของคุณ

คุณควรเห็นชีตใหม่ที่มีข้อมูลทั้งหมดในตารางเดือยของคุณซึ่งถูกย้ายในแบบที่คุณกำลังมองหา

เทคโนโลยี Datapig ให้คำแนะนำขั้นตอนโดยขั้นตอนที่เป็นจริงที่ซับซ้อนมากขึ้นกว่าที่คุณต้องการ - ตัวอย่างของเขา transposes เพียงส่วนหนึ่งของข้อมูลที่กำหนดและใช้เทคนิคการหมุนรวมกับTextToColumns แต่มันมีภาพจำนวนมาก

โปรดทราบว่าตารางเดือยจะจัดกลุ่มข้อมูล หากคุณต้องการไม่ได้จัดกลุ่มวิธีเดียวที่จะทำได้คือการคัดลอกตารางสาระสำคัญและ "วางแบบพิเศษ" เป็นค่า จากนั้นคุณสามารถเติมช่องว่างด้วยเทคนิคเช่นนี้: http://www.contextures.com/xlDataEntry02.html


ขอบคุณสำหรับคำตอบของคุณ แต่ฉันไม่แน่ใจว่าสิ่งที่คุณพูดที่นี่ สำหรับตัวอย่างในคำถามของฉันฉันจะใช้อะไรกับป้ายกำกับแถวป้ายชื่อคอลัมน์ค่าและตัวกรองรายงาน
devuxer

ถ้าฉันใส่ Id ลงในป้ายชื่อแถวและ Loc1 ถึง Loc4 ลงในป้ายชื่อคอลัมน์จากนั้นคลิกเซลล์ล่างขวา (จุดตัดของผลรวมทั้งหมด) จะสร้างแผ่นงานใหม่ที่มีตาราง แต่ไม่ใช่สิ่งที่ฉันต้องการ มันเป็นเพียงสำเนาของตารางเดือยปกติ
devuxer

ฉันขอโทษ - ฉันเหลือข้อมูลชิ้นสำคัญออกไป ตารางเดือยจะต้องเป็นตารางเดือยชนิด 'ช่วงการรวมหลาย' แม้ว่าในกรณีนี้คุณไม่มีอะไรจะรวม
DaveParillo

4
อ่าฉันค้นหามันในความช่วยเหลือและพบวิธีการหลังเพื่อรับ Pivot Table Wizard ใน Excel 2007 (คุณต้องกด ALT + D + P) ตอนนี้ฉันสามารถทำตามขั้นตอนของคุณได้แล้วและดูเหมือนว่าจะใช้ได้ ขอบคุณสำหรับความช่วยเหลือของคุณ!
devuxer

1
นี่คือวิธีการที่แน่ชัด: stackoverflow.com/questions/32115219/…
Quandary

7

หากข้อมูลของคุณไม่ใช่ตาราง Excel Pivot แต่เป็นเพียงข้อมูลคุณอาจต้องการ "ยกเลิกการเปลี่ยนแปลง" ด้วยรหัส VBA แบบง่าย ๆ รหัสขึ้นอยู่กับช่วงที่มีชื่อสองช่วงคือที่มาและเป้าหมาย แหล่งที่มาคือข้อมูลที่คุณต้องการยกเลิกการหมุน (ไม่รวมส่วนหัวคอลัมน์ / แถวเช่น NY-RI ในตัวอย่าง) และเป้าหมายคือเซลล์แรกที่คุณต้องการวางผลลัพธ์ของคุณ

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
ขอบคุณสำหรับสิ่งนี้. ทำงานเป็นข้อยกเว้นและทำให้ฉันประหยัดเวลาได้มาก
tigrou

ขอขอบคุณ!! นี่เป็นเพียงเวทมนต์! ดีกว่า jigiry-pokery ด้วยการไม่ลบการรายงานที่ไม่เคยทำงานให้ฉัน
trailmax

1
สิ่งนี้ดูดี แต่ที่ดีที่สุดที่ฉันบอกได้คือมันจะใช้ได้เฉพาะกับตารางที่มีส่วนหัวแถวเดียวเท่านั้น หากตารางในตัวอย่างมีส่วนหัวของแถวหลายแถวให้ระบุว่ามี "SubId" เพิ่มเติมจากเขตข้อมูล Id สิ่งนี้จะไม่ทำงาน มีวิธีง่าย ๆ ในการปรับเปลี่ยนเพื่อให้สามารถใช้งานได้ในสถานการณ์นี้หรือไม่?
Chris Stocking


4

มีวิธีแก้ปัญหาที่ดีใน excel 2010 เพียงแค่ต้องเล่นกับโต๊ะหมุน

สร้างตารางเดือยจากข้อมูลของคุณด้วยการตั้งค่าเหล่านี้:

  • ไม่มีผลรวมย่อยไม่มียอดรวมทั้งหมด
  • เลย์เอาต์รายงาน: รูปแบบตาราง, ทำซ้ำเลเบลรายการทั้งหมด
  • เพิ่มคอลัมน์ทั้งหมดที่คุณต้องการเก็บคอลัมน์ที่คุณต้องการแปลงทางด้านขวา
  • สำหรับแต่ละคอลัมน์ที่คุณต้องการแปลง: เปิดการตั้งค่าฟิลด์ - ในแท็บเลย์เอาต์และพิมพ์: เลือก“ แสดงฉลากรายการในแบบร่าง” และทำเครื่องหมายที่ช่องทำเครื่องหมายทั้งสองด้านล่าง
  • คัดลอกตารางของคุณไปยังตำแหน่งอื่น (ค่าเพียง)
  • หากคุณมีเซลล์ว่างในข้อมูลดั้งเดิมของคุณให้กรองค่าว่างในคอลัมน์ขวาสุดและลบแถวเหล่านั้น (อย่ากรองในตารางสาระสำคัญเนื่องจากจะไม่ทำงานตามที่คุณต้องการ!)

1
นี่เป็นคำตอบที่ดีที่สุดถ้าคุณอยู่ในปี 2010 และสูงกว่าและไม่ชัดเจนในอินเทอร์เฟซ เยี่ยมมาก - น่าเสียดายที่ฉันมีหนึ่ง upvote เท่านั้น!
jkf

3

ดีที่สุดฉันมาถึงตอนนี้คือ:

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)

ใช้งานได้ แต่ฉันต้องสร้างรหัสและ LocNum ด้วยตนเอง หากมีวิธีการแก้ปัญหาอัตโนมัติเพิ่มเติม (นอกเหนือจากการเขียนแมโคร) โปรดแจ้งให้เราทราบในคำตอบแยกต่างหาก


2

หากขนาดของข้อมูลของคุณอยู่ในตัวอย่างที่ให้ไว้ในคำถามของคุณชุดของสูตรต่อไปนี้ที่ใช้ OFFSET ควรให้ผลลัพธ์ตามที่คุณต้องการ:

ทะลึ่ง

1 | NY | CA | TX | IL

2 | วอชิงตัน | หรือ | NH | โรตารีสากล

อยู่ในช่วง A2: E3 จากนั้นป้อน

= OFFSET ($ A $ 2 ชั้น ((ROW (A2) -ROW ($ A $ 2)) / 4,1), 0)

ใน F2 พูดและ

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

ใน G2 พูดและ

= OFFSET ($ B $ 2 ชั้น ((ROW (B2) -ROW ($ B $ 2)) / 4,1), MOD (ROW (A2) -ROW ($ A $ 2) 4))

ใน H2 พูด

จากนั้นคัดลอกสูตรเหล่านี้ตามที่ต้องการ

นี่เป็นวิธีแก้ปัญหาสูตรที่ง่ายและบริสุทธิ์ที่สุดที่ฉันนึกออก


1

ดูเหมือนว่าคุณจะได้คอลัมน์ "loc" (เห็นได้จากคำตอบแรกของคุณ) และตอนนี้คุณต้องการความช่วยเหลือในการรับอีกสองคอลัมน์

ตัวเลือกแรกของคุณคือพิมพ์แถวแรก (พูด 12 แถว) ลงในคอลัมน์เหล่านั้นแล้วลากลง - ฉันคิดว่า Excel ทำสิ่งที่ถูกต้องในกรณีนี้ (ฉันไม่มี excel บนคอมพิวเตอร์เครื่องนี้เพื่อทดสอบอย่างแน่นอน)

หากวิธีนี้ใช้ไม่ได้ผลหรือหากคุณต้องการโปรแกรมเมอร์มากกว่านี้ลองใช้ฟังก์ชั่น row () บางอย่างเช่น "= Floor (row () / 4)" สำหรับคอลัมน์ ID และ "= mod (row (), 4) +1" สำหรับคอลัมน์ LocNum


1

มียูทิลิตี้การแปลง VBA เป็นพารามิเตอร์สำหรับการยกเลิกการหมุนหรือย้อนกลับข้อมูลที่หมุนได้กลับไปที่ตารางฐานข้อมูลโปรดดู

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


1
ยินดีต้อนรับสู่ Super User! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Peachy

1

นี่เป็นเครื่องมือที่ดีในการยกเลิกการตรึงมาตรฐานตาราง Pivot

Normalisieren von Pivot Tabellen

ฉันหวังว่ามันจะช่วย


1
ยินดีต้อนรับสู่ SuperUser! ในขณะที่เครื่องมือที่คุณเชื่อมโยงกับข้อเสนอการแก้ปัญหาโพสต์นี้มีประโยชน์เฉพาะเมื่อการเชื่อมโยงยังคงใช้งานอยู่ เพื่อให้แน่ใจว่าโพสต์ของคุณจะมีประโยชน์ในอนาคตโปรดแก้ไขคำตอบของคุณเพื่อรวมข้อมูลเพิ่มเติมใด ๆ เกี่ยวกับผลิตภัณฑ์รวมถึงวิธีใช้เพื่อแก้ไขปัญหาที่อธิบายในคำถาม ขอบคุณ!
Excellll

1

@DaveParillo คำตอบเป็นคำตอบที่ดีที่สุดสำหรับตารางแท็บเดียว ฉันต้องการเพิ่มความพิเศษบางอย่างที่นี่

สำหรับหลายคอลัมน์อยู่ข้างหน้าคอลัมน์ unpivot

วิธีนี้ใช้ไม่ได้ผล

Youtube ยกเลิกการย้ายข้อมูลอย่างง่ายเช่นคำถาม

นี่เป็นวิดีโอ youtube ที่แสดงวิธีการเล่นในแบบง่าย ๆ ฉันข้ามส่วนเกี่ยวกับการเพิ่มทางลัดและใช้ @devuxer ทางลัดที่อยู่ในคำตอบของ DaveParillo

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


3
สาระสำคัญของคำตอบของคุณคือลิงค์ไปยังวิดีโอและไม่มีการอธิบายเนื้อหา หากลิงค์แตกหรือไม่พร้อมใช้งานคำตอบของคุณจะไม่มีค่า โปรดระบุข้อมูลที่จำเป็นในคำตอบของคุณและใช้ลิงก์เพื่อระบุแหล่งที่มาและการสำรวจเพิ่มเติม
fixer1234

-2

มันง่ายกว่านี้มาก เพียงคลิกตัวเลือก "โอนย้าย" ใน "วางแบบพิเศษ ... " เพื่อรับการย้ายที่คุณต้องการ


1
สิ่งนี้จะไม่ทำงาน
zx8754
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.