Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

PivotTable...PivotField.Function..

Function

아래의 그림과 같은 테이블의 내용을
PivotTable을 사용하여 정보를 분석할때..



담당자별로 총매출액은 얼마인가?
담당자별로 최고매출액은 얼마인가?
담당자별로 매출액의 표준편차는 얼마인가?
담당자별로 매출회수는 몇번인가?

라고 하면 계산방법이 각각 틀리다
즉 DataField에 적용할 함수가 계산방법에 따라서 틀려야 한다는 이야기지..

피봇테이블은 분석할 데이타의 정보타입이 숫자이면
기본적으로 총합계를 계산해주고
분석할 데이타의 정보타입이 문자나 날자이면
갯수를 세어주는 계산을 한다
피봇테이블마법사로 손으로 그린다면 선택을 해나가면 되지만
프로그래밍을 한다면 각각의 계산방식에 따라서 어떤 함수를
전달할것인지에 대하여 결정하여야 하고
프로그래밍을 한다고 한다면..이 정도는 그냥 자연스럽게 처리가
될수 있어야 한다

부분합에서 분석을 할때 함수의 선택을 하였었다면
뭔소린지 알것이다



이번 시간에는 피봇필드의 위치를 메뉴상에서 선택할때
만약 Data를 선택하면
해당휠드의 정보타입이 날자타입인지..문자열타입인지..숫자타입인지 확인하여
왜 확인하느냐구??
문자타입정보를 합계를 내거나 평균을 낸다는것은???
말이 안된다는것을..
초등학생도 알잖아!!
그러니 문자열정보나 날자정보의 경우는 그냥 Count함수..갯수만 분석하는
일만이 맞는 일이다 그래서 그림과 같이 함수메뉴는 Count메뉴만 나타나게 한다
하나 밖에 함수가 없어서 별도의 함수메뉴는 의미가 없지만 그래도 하자



만약 판매액같이 숫자정보의 경우는 모든 함수가 나타나는 메뉴를 만들고
기본으로는 SUM함수가 실행되게 한다



필드의 위치를 선택하고 DataField를 판매액으로 선택하고
함수메뉴를 크릭하면
상품분류별,담당자별 평균판매액을 아래의 그림과 같이 만들수 있겠다



셀을 더블크릭할때 발생하는
이벤트프로시져에서 선택된 셀의 함수의 상수를 찾아서
아래와 같이 PivotField 오브젝트의 Function속성에 전달한다

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
...
...
...
oPivot.PivotFields(oPivot.TableRange1.Cells(1).Value).Function = GetFunctionNum(Target)
...
...
End Sub

Function GetFunctionNum(rTarget As Range)
Dim lX As Long
Select Case rTarget.Value
     Case "AVERAGE": lX = xlAverage
     Case "COUNT": lX = xlCount
     Case "COUNTA": lX = xlCountNums
     Case "MAX": lX = xlMax
     Case "MIN": lX = xlMin
     Case "PRODUCT": lX = xlProduct
     Case "STDEV": lX = xlStDev
     Case "STDEVP": lX = xlStDevP
     Case "SUM": lX = xlSum
     Case "VAR": lX = xlVar
     Case "VARP": lX = xlVarP
End Select
GetFunctionNum = lX
End Function




PivotTable_006.