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

Excel & VBA---Brain Training


PivotTable|
분석보고서의 핵심..

XML과 DOM 개체를 몇장해나가다 보니..
많은 분들이 별로 관심을 갖지 못한다
이유는 다른 것이 없을 것이다
엑셀도 제대로 잘 못하는데..헷갈리게..!@!@$!!
좋은 의견이시다

그래서 엑셀의 핵심을 더 따지고 활용하는 것으로 잠시 방향을 틀자!!
피봇테이블은 분석보고서의 핵심엔진이다
그런나 많이들 활용을 잘 하지 못한다
피봇테이블의 구성개체들을 충분히 이해한다면
정보가공에 있어서 정보를 보는 눈이 달라진다

이번 BrainTraining Corner에서 Pivot을 자유자재로 활용하는
기회들이 되도록 진행해 가보자

아래의 코드를 실행시키면
어디선가 갖여온 분석없는 순수한 테이블이다
이런 것은 아무짝에도 쓸모가 없다
보기 좋게 재가공을 해야 한다

Sub CreateDummyDatas() Dim shtX As Worksheet, iX As Integer Set shtX = Worksheets.Add With shtX.Range("A1") .Resize(, 3) = Array("일자", "담당자", "매출액") For iX = 1 To 1000 .Offset(iX) = _ DateSerial(2010, Int(Rnd() * 12) + 1, Int(Rnd() * 31)) .Offset(iX, 1) _ = Choose(Int(Rnd() * 6) + 1, _ "오징어", "낙지", "쭈꾸미", "고등어", "꼴뚜기", "문어") With .Offset(iX, 2) .Value = _ Application.Round(CLng(Rnd() * 100000) + 50000, 3) .NumberFormat = "###,###" End With Next .CurrentRegion.Columns.AutoFit End With End Sub

아래의 그림과 같이 데이타가 1000개 만들어진다
이것을 오른쪽 그림과 같이 요약보고서 테이블을 만들기다
방법은 여러가지이다



그냥 Range개체를 셀마다 순환하면서 처리할 것인가..
아니면 엑셀이 제공하는 기능을 사용할 것인가???
분석보고서의 핵심엔진인 피봇테이블을 활용해 보아도 좋고
그냥 연습삼아 생각나는대로 Range개체를 나름대로 적절히
분석해서 보고서를 만들어 보셔도 좋고

여기에서의 해법은 피봇테이블에게 분석을 시키고
이것을 달랑 값만 뽑아다가 별도의 말끔한 보고서로 변신시키도록 한다

피봇테이블을 만들어 놓으면 좋지만 자원을 많이 먹고
여기저기 만들어 놓으면 효율이 떨어진다

VBA를 즐기는 이유도 그런 이유다!!

피봇테이블을 만드는 것은 아래와 같이 간단하다

Dim rData As Range Dim shtX As Worksheet Dim oPivot As PivotTable Set shtX=ActiveSheet Set rData = shtX.Range("피봇에서분석할대상이 되는 범위") '위와 같이 피봇의 쏘스가 될 범위를 찾아낸후, 이것을 피봇그리는 메소드에 '전달하면 된다 Set oPivot = shtX.PivotTableWizard(SourceType:=xlDatabase, _ SourceData:=rData, TableDestination:=shtX.Range("G5"))

위와 같이 하면 피봇테이블이 생성되어 해당시트 G5에
그려지는데 이때는 내용이 하나도 없는 빈탕이다
셀이 4개만 달랑 그려진다
물론 피벗의 구조는 시트에 생성이 되고 피벗이 사용할 정보도
갖고 있는 상태일 뿐아직 어떻게 표현할 것인지는 구현이 안된 셈이다

이제 생성된 PivotTable이라는 개체의 하위개체에게
일을 시키면 되는 것이다

그렇게 피벗의 하위 개체로 원하는 분석을 시킨후
원하는 피벗결과물을 몽땅 선택하여 복사하여
값만 붙여 넣기를 한후
임무를 마친 PivotTable개체는 없애버리면 원하는 결과를 얻는 것이다
참으로 개체지향의 재미를 느낄수 있는 Pivot테이블인 셈이다
그럼 궁리를 하여 잘 풀어 보시기를..
이것을 한번 풀면 정보가공,분석에 자신만만해 질 것이다..


BrainTraining_Pivot_1.



날짜는 월별로만 분석이 되는 것이 아닐것이다
위의 경우는 년도가 다르더라도 같은 월은 한꺼번에 묶여 버릴것이다
년도를 분리하여야 계산은 맞지만 논리적으로 결과가 다른 경우가
생길수도 있다
위와 같이 하려면 쏘스테이블정보가 같은 년도의 경우에만
정상적인 분석이라고 할 수 있을 것이다
아래의 그림과 같이 월,분기,년도별로 그룹핑을 할수 있어야 할 것이다



눈치가 빠르고 재치가 있다면 벌써 위의 화일의 코드를
한두자 수정하고 만들어 보신분도 있을 것이고
그것을 만들어 보자



어허..그것참 디지게 간단하네..
활용하기 나름이니까...
각자 만들어 보시고 ,
사용자정의 폼의 콘트롤값을 어떻게 전달하면 좋을지 생각해 보시기를
위의 코드에 그냥 값만 전달하면 된다!!

알고 나면 뭐야..이렇게 간단한거야..
맞다..알고 나면 죄다 간단한 것이다..
간단할때까지 골을 좀 굴려야 하는 BrainTraining이다!!


BrainTraining_Pivot_2.