PROGRAMMING WORKSHOP

자재관리 | DashBoard

STEP_5 ---------------------------------

화일이 수식이 많이 걸려 있으니 버벅거린다..
계속 눈에 거슬린다
수식을 모두 걷어 내고 VBA로 바꾸자
실은 대개의 작은 DashBoard는 그냥 수식으로 걸어서들 하지만..
욕심히 많아서 기능이 많아 지면 수식은 거치장 스럽고..효율을 떨구게 된다
간단한 것은 수식들을 즐기시고, 욕심을 부려 기능을 많이 추가하시려면 VBA를 사용하시기를..
기준은 어떤 기준?? 눈에 뜨이게 버벅거리는 것이 보이면!!
시트의 작은 버튼을 크릭하면 이동하던 버튼에 아래와 같이 추가하자

Sub movePage()
Dim sPage As String
On Error Resume Next
sPage = Me.Buttons(Application.Caller).Caption
With ActiveWindow
    .ScrollRow = Me.Range(sPage).Row
    .ScrollColumn = 1
End With
'//////////////////추가////////////
modSummaryTable.createSummaryTable sPage 
'////////////////////////////////////
If sPage = "Page_1" Then
    UserFormFilter.Show
Else
    Unload UserFormFilter
End If
End Sub

모듈시트를 별도로 하나 빼서, 요약테이블만 만드는 공장을 차리자
공장을 차리면서 가장 중요한 것은
재료를 어디서 공급받을 것인지를 정리하는 것이 좋다
이런 관계를 대강의 프레임을 작성해 놓고 상세한 작업에 들어가는 것이 좋다

Sub createSummaryTable(sPage As String)
On Error Resume Next
Dim rSrcTbl As Range
Dim rStart As Range
Const sHeadRow_2 As String = ",계약금액,집행금액,차이,절감율"
Const sHeadRow_3 As String = ",,계약금액,집행금액,차이,절감율"
Const sHeadRow_4 As String = ",계약금액,집행금액,차이,절감율"

Set rSrcTbl = Worksheets("원본").Range("A1").CurrentRegion
Set rSrcTbl = rSrcTbl.Offset(1).Resize(rSrcTbl.Rows.Count - 1)

If rSrcTbl Is Nothing Then
    MsgBox "원본시트가 없습니다, 확인하시고 다시하세요.."
    Exit Sub
End If

Set rStart = Worksheets("STUDIO").Range(sPage)
If rStart Is Nothing Then
    MsgBox sPage & " 이름이 손상되었습니다, 확인하시고 다시하세요"
    Exit Sub
End If

Select Case sPage
    Case "Page_1"
    Case "Page_2"
    '=SUMPRODUCT((OFFSET(datecol,,1)=STUDIO!B45)*OFFSET(datecol,,3)*OFFSET(datecol,,5))
   
    Case "Page_3"
    '=SUMPRODUCT((OFFSET(datecol,,8)=STUDIO!B85)*(OFFSET(datecol,,7)=C85)*OFFSET(datecol,,3)*OFFSET(datecol,,5))
    
    Case "Page_4"
    '=SUMPRODUCT((MONTH(datecol)=MONTH(B9))*(YEAR(datecol)=YEAR(B9))*OFFSET(datecol,,3)*OFFSET(datecol,,5))
    
End Select


' Chart 연결관련...


End Sub

정보를 제공하는 곳의 유효성
정보를 뿌려 줄 곳의 유효성
각 테이블의 시작 위치확보
그런후 각버튼에 따른 작업내용
이 작업내용은 수식이 작성되었던 것이니
수식을 복사하여 주석처리하고 참고하면 편리하게 된다

아래의 화일에는 아래의 그림과 같이 프로그래밍과정을 잘 볼수 있게한 쌤플이다

***[LOG-IN]***

만들어서 무조건 셀에 잡아넣는 것이 아니고..
우선 디버깅방법(메시지박스는 좋은 디버깅도구이다)을 돌리면서
값이 맞는지 , 안맞는지 확인 절차를 거치면서 하면 된다
이렇게 하나의 프로토타입을 잡은후 다른 것은 이 프로토타입에서
조금씩 수정해주면 되는 것이다
표준을 우선 잡은후...잘 돌아가는지 확인후..
그 과정을 담은 화일이니 작은 버튼중 Page_2를 크릭하여 값의 계산과정을 관찰해 보세요



이렇게 관찰하면서 중복되는 계산이 없는지..
예를 들어서 위의 화일에 있는 계산식의 경우

dblTemp1 = getSubTotal("대분류", rX.Value, "계약금액", rSrcTbl)
dblTemp2 = getSubTotal("대분류", rX.Value, "집행금액", rSrcTbl)

두개의 값이 한 행에 있는 내용인데, 함수를 두번 호출할 필요가 있을까?

함수를 한번만 불러서 처리하는 방법은 없을까?
생각해 볼 만한 문제일 것이다
각자 생각해 보시고, 나머지도 방법은 같은 것이니..다른 부분도 확장시켜보시고
다음 화일에 좀더 정리해 보자
또한 Application.Calculation="" 을 하였을때와 안하였을때의 속도차이도 얼마나
큰지 관찰해 보세요!!

아래화일에서 아래그림의 기능을 추가했다



수식으로 값을 유지하고 있으면 정보의 항목이 늘어나거나 줄어 들때
챠트도 일일이 손으로 수정을 해 주어야 한다
그러나 자동화시켜, 값을 모두 프로그래밍적으로 갖여 오고
항목이 늘던, 쭐던 해당 챠트의 참조범위를 자동으로 수정해주어야
진정한 자동화가 된다
그리고 테이블 서식도 일관성있게 모든 테이블이 같은 모양을 유지하게 된다

***[LOG-IN]***