2017-12-08 41 views
0

enter image description here보이는 피벗 항목 데이터를 Excel VBA의 셀로 복사하는 방법

피벗 보고서 필터에 국가 코드가 있습니다. 보이는 pivotiot 항목 데이터를 가져 와서 A1의 각 셀에 각 값을 배치하고 싶습니다. 아래 코드를 사용했습니다. 그러나 모든 셀은 필터의 마지막 값만 표시합니다. 나는 복사 A1, B1, C1 ....... 세포에 이리저리 Country Code 열 보이는 모든 값을 붙여 넣습니다 코드에 따라 A1 .Help 나

Sub Getpivotitem() 

Dim ws As Worksheet 
Dim str1 As Variant 
Dim Data As Variant 
Dim rng As Range 

Set rng = Range("A1:X1") 
Set ws = Sheets("Sheet1") 

Dim pi As PivotItem 
For Each pi In ws.PivotTables("PivotTable1").PivotFields("Country Code").PivotItems 
    If pi.Visible = True Then 
     For Each cell In rng.Columns 
     cell.Value = pi 
     Next cell 
    End If 
Next pi 

End Sub 
+0

피벗 테이블 데이터가 예상 한 결과와 다릅니다. 피벗 테이블에'FR','DE','ES' ....가 어디에 있습니까? – harun24hr

+0

@ harun24hr 예 피벗 테이블의 값에서 해당 값을 선택했습니다. – Deepak

답변

1

출력이 중첩 루프 때문입니다. 단순히 피벗 테이블의 복사본을 만들고, 국가 코드 필드를 제외하고 그것에서 모든 필드를 제거 :이 당신이 엑셀 2010 이상에 대한

Sub Getpivotitem() 

    Dim ws As Worksheet 
    Dim str1 As Variant, Data As Variant 
    Dim pi As PivotItem 
    Dim rng As Range 
    Dim j As Long 

    Set ws = Sheets("Sheet1") 
    Set rng = Range("A1:X1") 

    For Each pi In ws.PivotTables("PivotTable1").PivotFields("Country Code").PivotItems 
     If pi.Visible = True Then 
      j = j + 1 
      ws.cells(1, j) = pi 
     End If 
    Next pi 

End Sub 
+0

고맙습니다. 완벽하게 작동합니다. – Deepak

0

에서 자동으로 이동해야합니다.

Sub CopyVisiblesValues() 

    Sheet1.PivotTables("PivotTable1").PivotSelect "'Country Code'[All]", xlLabelOnly + xlFirstRow, True 
     Selection.Copy 
    Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 

End Sub 

여기 Country Code 피벗 테이블 칼럼 헤더뿐만 아니라 소스 데이터의 칼럼 헤더이다. 당신은 Country Code을 조정해야 할 수도 있습니다.

+0

헤더 만 복사합니다. 필터 안의 값이 아닙니다. – Deepak

+0

샘플 워크 북을 공유해주십시오. Google 드라이브에서 공유 한 다음 댓글에 링크를 제공하십시오. 코드가 내 컴퓨터에서 작동합니다. – harun24hr

1

비 VBA 접근 찾고있는 무슨 생각합니다. 국가 코드 필드를 ROWS 또는 COLUMNS 창으로 이동하고 두 피벗 테이블을 모두 슬라이서와 연결하십시오. Bingo : PivotTable에서 어떤 선택을했는지 보여주는 목록이 있습니다. 더 나아가 사용자는 간단히 슬라이서를 사용하여 선택을 할 수 있습니다.