programing

숫자가 아닌 텍스트를 보여주기 위해 집계 없이 엑셀로 피벗?

powerit 2023. 11. 4. 13:21
반응형

숫자가 아닌 텍스트를 보여주기 위해 집계 없이 엑셀로 피벗?

제게 이런 테이블이 있다고 치자.

Country Region  Mytext
USA     North   a
USA     South   b
Brasil  North   c
Brasil  South   d

엑셀에서 이와 같은 피벗을 얻으려면 어떻게 해야 합니까?

Country  North         South
USA      a             b
Brasil   c             d

'mytext'가 숫자라면 피벗 테이블을 수행할 수 있습니다. 국가와 지역의 조합당 하나의 행만 있기 때문에 min = max = sum = avg 및 이들 집계 함수 중 어떤 것이라도 실제로 제가 원하는 결과를 보여줄 것입니다.

하지만 제가 원하는 필드가 숫자가 아닌 경우에는 어떻게 해야 합니까?파이썬의 팬더 라이브러리를 이용하면 데이터 프레임을 사용할 수 있습니다.숫자가 아닌 필드에서도 피벗() 메소드를 사용할 수 있지만 엑셀에서 동일한 방법을 찾을 수 없습니다.각 행에 숫자를 연결하고, 엑셀에서 피벗을 하여 그 숫자를 보여주고, 검색을 하여 연관된 텍스트를 얻을 수 있지만, 정말로 더 쉬운 것을 위한 다소 복잡한 과정인 것 같습니다!

MS Power Query Add-in*을 사용할 수 있습니다.피벗 테이블은 vba 없이 쉽게 사용할 수 있습니다.무료이며 데이터 변환에 매우 효과적입니다.

엠코드

 let
    Source = Excel.CurrentWorkbook(){[Name="table1"]}[Content],
    #"Pivot column" = Table.Pivot(Source, List.Distinct(Source[Region]), "Region", "Mytext")
in
    #"Pivot column"

유어 아웃풋

´* MS Office 2016부터는 Get & Transform 기능으로 엑셀에 완전히 통합되어 있습니다.

국가 레이블 아래에 내 텍스트를 행 레이블로 추가한 다음 피벗 테이블 디자인 탭 아래에 피벗 테이블을 표 형식으로 표시합니다.국가 행 레이블 필드에 대해 항목 레이블을 반복합니다.

이후 독자를 위해 - 두 가지 기능을 함께 사용합니다.

리본 > 피벗테이블 도구 > 보고서 레이아웃 > 표 형태로 표시

그리고.

리본 > 피벗테이블 도구 > 보고서 레이아웃 > 모든 항목 레이블 반복

행 필드는 왼쪽에서 오른쪽으로 수직으로 반복되는 텍스트로 표시됩니다.

이 작업을 수행하려면 VBA가 PivotTable의 숫자 'placeholder' 값을 일부 텍스트로 일시적으로 덮어써야 합니다.이를 활성화하려면 피벗 테이블에 대해 EnableDataValueEditing = True를 설정해야 합니다.새로 고침 시 숫자 자리 표시자 값을 조회한 후 텍스트로 대체합니다.복잡하네요, 그렇죠.해결책, 네.하지만 효과는 있습니다.피벗 테이블이 다음 번 새로 고쳐질 때까지 이 코드만 'stick'되므로, 이 코드는 새로 고쳐질 때마다 트리거해야 합니다.

내 프로젝트 중 하나에서 이 작업을 수행하는데 사용되는 코드는 다음과 같습니다.표준 코드 모듈에 입력합니다.

Function Pivots_TextInValuesArea(pt As PivotTable, rngNumeric As Range, rngText As Range, Optional varNoMatch As Variant)

Dim cell As Range
Dim varNumeric As Variant
Dim varText As Variant
Dim varResult As Variant
Dim bScreenUpdating As Boolean
Dim bEnableEvents As Boolean
Dim lngCalculation As Long


On Error GoTo errHandler
With Application
    bScreenUpdating = .ScreenUpdating
    bEnableEvents = .EnableEvents
    lngCalculation = .Calculation
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
End With


varNumeric = rngNumeric
varText = rngText

pt.EnableDataValueEditing = True
'Setting this to TRUE allow users or this code to temporarily overwrite PivotTable cells in the VALUES area.
'Note that this only 'sticks' until the next time the PivotTable is refreshed, so this code needs to be
' triggerred on every refresh

For Each cell In pt.DataBodyRange.Cells
    With cell
        varResult = Application.Index(varText, Application.Match(.Value2, varNumeric, 0))
        If Not IsError(varResult) Then
            cell.Value2 = varResult
        Else:
            If Not IsMissing(varNoMatch) Then cell.Value2 = varNoMatch
        End If
    End With
Next cell

errHandler:
 If Err.Number > 0 Then
    If gbDebug Then
        Stop: Resume
    Else:
        MsgBox "Whoops, there was an error: Error#" & Err.Number & vbCrLf & Err.Description _
         , vbCritical, "Error", Err.HelpFile, Err.HelpContext
    End If
End If

With Application
    .ScreenUpdating = bScreenUpdating
    .EnableEvents = bEnableEvents
    .Calculation = lngCalculation
End With


End Function

결과는 다음과 같습니다. VALUES 영역에 텍스트가 있는 피벗 테이블:

enter image description here

각 번호에 대해 코드에 표시할 내용을 알려주는 '변환' 표는 다음과 같습니다.

enter image description here

코드가 룩업 테이블을 찾을 위치를 알 수 있도록 두 개의 이름이 지정된 범위를 지정했습니다.

  • tbl_PivotValues입니다.텍스트 값
  • tbl_PivotValues입니다.숫자 값

...Function을 트리거하고 필요한 인수를 전달하는 방법은 다음과 같습니다.

Option Explicit

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

If Target.Name = "GroupView" Then Pivots_TextInValuesArea Target, [tbl_PivotValues.NumericValue], [tbl_PivotValues.TextValue]

End Sub

이 코드는 피벗 테이블이 있는 워크시트에 해당하는 워크시트 코드 모듈에 들어갑니다.

enter image description here

언급URL : https://stackoverflow.com/questions/32767117/pivot-in-excel-without-aggregation-to-show-text-not-numbers

반응형