숫자가 아닌 텍스트를 보여주기 위해 집계 없이 엑셀로 피벗?
제게 이런 테이블이 있다고 치자.
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 영역에 텍스트가 있는 피벗 테이블:
각 번호에 대해 코드에 표시할 내용을 알려주는 '변환' 표는 다음과 같습니다.
코드가 룩업 테이블을 찾을 위치를 알 수 있도록 두 개의 이름이 지정된 범위를 지정했습니다.
- 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
이 코드는 피벗 테이블이 있는 워크시트에 해당하는 워크시트 코드 모듈에 들어갑니다.
언급URL : https://stackoverflow.com/questions/32767117/pivot-in-excel-without-aggregation-to-show-text-not-numbers
'programing' 카테고리의 다른 글
사용자 지정 파이썬 목록 정렬 (0) | 2023.11.04 |
---|---|
php_network_getaddresses: 도커의 관리자에서 getaddrinfo 오류가 발생했습니다. (0) | 2023.11.04 |
JavaScript clearTimeout이 작동하지 않습니다. (0) | 2023.11.04 |
각도를 분할하는 방법JS를 작은 모듈에 적용하고 라우팅을 올바르게 처리합니까? (0) | 2023.11.04 |
저장 프로시저에서 파라미터를 검색하시겠습니까? (0) | 2023.11.04 |