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에서 가장 쉬운 방법은 무엇입니까?


1
정답을 찾았습니다 : stackoverflow.com/questions/32115219/…
Quandary

답변:


69

피벗 테이블을 사용하여이 작업을 수행 할 수 있습니다.

  1. "여러 통합 범위 피벗 테이블"을 만듭니다. (만과 피벗 테이블 마법사. 콜업에 ALT+ D, P엑셀 2007에서)
  2. "나만의 페이지 필드를 작성합니다"를 선택하십시오.
  3. 데이터를 선택하십시오.
  4. 피벗 테이블의 오른쪽 하단 에서 행 그랜드열 그랜드 의 교차점에있는 총계 값을 두 번 클릭하십시오 .

피벗 테이블의 모든 데이터가 포함 된 새 시트가 원하는 방식으로 바뀝니다.

Datapig 기술 은 실제로 필요한 것보다 더 복잡한 단계별 지침 을 제공합니다. 그의 예제는 데이터 세트의 일부만 바꾸고 TextToColumns 와 결합 된 피벗 기술을 사용합니다 . 그러나 많은 그림이 있습니다.

피벗 테이블은 데이터를 그룹화합니다. 그룹화하지 않으려면 피벗 테이블을 복사하고 값으로 "특별 붙여 넣기"를 수행하는 것이 유일한 방법입니다. 그런 다음 http://www.contextures.com/xlDataEntry02.html 과 같은 기술로 공백을 채울 수 있습니다 .


귀하의 답변에 감사드립니다, 그러나 나는 당신이 여기서 무엇을 말하는지 잘 모르겠습니다. 내 질문의 예에서 행 레이블, 열 레이블, 값 및 보고서 필터에 무엇을 사용합니까?
devuxer 2009

Id를 행 레이블에 넣고 Loc1을 통해 Loc4를 통해 열 레이블에 넣은 다음 오른쪽 하단 셀 (총합계의 교차점)을 클릭하면 테이블이있는 새 시트가 생성되지만 원하는 것은 아닙니다. 기본적으로 일반 피벗 테이블의 복사본입니다.
devuxer 2009

죄송합니다. 중요한 데이터를 제외했습니다. 피벗 테이블 '다중 통합 범위'유형 피벗 테이블 이어야 하지만이 경우 통합 할 대상이 없습니다.
DaveParillo 2009

4
아, 알았어. 도움말에서 찾은 후 Excel 2007에서 이전 피벗 테이블 마법사를 얻는 백도어 방법을 찾았습니다 (ALT + D + P를 눌러야 함). 이제 귀하의 단계를 밟을 수 있으며 효과가있는 것 같습니다. 당신의 도움을 주셔서 감사합니다!
devuxer 2009

1
방법은 다음과 같습니다. stackoverflow.com/questions/32115219/…
Quandary

7

데이터가 Excel 피벗 테이블이 아니라 데이터 인 경우 간단한 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
이것은 멋지지만 내가 알 수있는 한 행 헤더가 하나만있는 테이블에서만 작동합니다. 예제의 테이블에 여러 행 헤더가있는 경우 ID 필드 외에 "SubId"가 있다고해도 작동하지 않습니다. 이 상황에서 작동하도록 수정하는 쉬운 방법이 있습니까?
Chris Stocking


4

Excel 2010에는 훌륭한 솔루션이 있습니다. 피벗 테이블로 조금만 연주하면됩니다.

다음 설정으로 데이터에서 피벗 테이블을 만듭니다.

  • 소계 없음, 총합계 없음
  • 보고서 레이아웃 : 표 형식, 모든 항목 레이블 반복
  • 필요한 모든 열을 추가하고 변환하려는 열을 오른쪽에 유지
  • 변환하려는 각 열에 대해 : 필드 설정 열기 – 레이아웃 및 인쇄 탭에서 : "개요 형식으로 항목 레이블 표시"를 선택하고 그 아래의 확인란을 모두 선택하십시오.
  • 테이블을 별도의 위치에 복사하십시오 (값만).
  • 원본 데이터에 빈 셀이 있으면 가장 오른쪽 열에서 빈 값을 필터링하고 해당 행을 삭제하십시오 (피벗 테이블에서 필터링하지 마십시오. 필요한대로 작동하지 않습니다!)

1
인터페이스에 분명하지 않은 2010 년부터는 이것이 가장 좋은 대답입니다. 위대한 발견-슬프게도 나는 단 하나의 공감대를 가지고 있습니다!
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)

이것은 작동하지만 Id와 LocNum을 수동으로 생성해야합니다. 매크로 작성 외에 더 자동화 된 솔루션이있는 경우 별도의 답변으로 알려주십시오.


2

데이터의 차원이 질문에 제공된 샘플과 같으면 OFFSET을 사용하는 다음 수식 세트가 필요한 결과를 제공해야합니다.

가정

1 | 뉴욕 | CA | TX | 일리노이

2 | WA | 또는 | NH | RI

A2 : E3 범위에있는 경우 다음을 입력하십시오.

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

F2에서

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

G2에서

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

H2에서 말합니다.

그런 다음이 공식을 필요한만큼 복사하십시오.

이것은 내가 생각할 수있는 가장 쉽고 순수한 내장 수식 솔루션입니다.


1

"loc"열을 얻은 것 같습니다 (첫 번째 답변에서 입증 됨). 이제 다른 두 열을 얻는 데 도움이 필요합니다.

첫 번째 옵션은 열에 첫 번째 (예 : 12) 행을 입력하고 아래로 드래그하는 것입니다.이 경우 Excel이 올바른 작업을 수행한다고 생각합니다 (이 컴퓨터에서는 확실하게 테스트 할 수는 없습니다).

그래도 작동하지 않거나 더 많은 프로그래머가 필요하면 row () 함수를 사용해보십시오. ID 열의 경우 "= Floor (row () / 4)"및 LocNum 열의 경우 "= mod (row (), 4) +1"과 같은 것입니다.


1

피벗 된 데이터를 피벗 해제하거나 역으로 데이터베이스 테이블로 되돌릴 수있는 파라 메트릭 VBA 변환 유틸리티가 있습니다.

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


1
슈퍼 유저에 오신 것을 환영합니다! 이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Peachy

1

피벗을 해제하고 피벗 테이블을 정규화하는 유용한 도구가 있습니다.

피벗 타 벨렌

도움이 되길 바랍니다.


1
수퍼 유저에 오신 것을 환영합니다! 링크 한 도구가 솔루션을 제공하지만이 게시물은 링크가 활성 상태 인 경우에만 유용합니다. 게시물이 향후에도 유용하게 사용되도록하려면 질문에 설명 된 문제를 해결하는 데 사용하는 방법을 포함하여 제품에 대한 추가 정보를 포함하도록 답변을 편집 하십시오. 감사!
Excellll

1

@DaveParillo 답변은 단일 탭 테이블에 가장 적합한 답변입니다. 여기에 엑스트라를 추가하고 싶었습니다.

피벗 해제 열 앞에 여러 열이있는 경우

이 방법은 작동하지 않습니다.

유튜브는 질문과 같은 간단한 데이터를 피벗 해제

간단한 방법으로 수행하는 방법을 보여주는 YouTube 비디오입니다. 바로 가기 추가에 대한 부분을 건너 뛰고 DaveParillo 답변에있는 @devuxer 바로 가기를 사용했습니다.

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


3
답변의 내용은 동영상에 대한 링크이며 내용은 설명되어 있지 않습니다. 링크가 끊어 지거나 사용할 수없는 경우 답은 가치가 없습니다. 답에 필수 정보를 포함시키고 귀속 및 추가 탐색을 위해 링크를 사용하십시오.
fixer1234

-2

이것보다 훨씬 간단합니다. "Paste Special ..."에서 "Transpose"옵션을 클릭하면 원하는 조옮김을 얻을 수 있습니다.


1
이 작동하지 않습니다.
zx8754
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.