PROGRAMMING WORKSHOP

Financial Planning | 재무제표등에서의 계정합계 자동화

아래의 그림과 같이 코드에 의하여 모든 계정이 관리된다
이때 입력계정과 입력계정을 계정별 상위계정합계를 만들어야 한다
VBA는 이런 것을 쉽게 합계를 만들어 줄수 있다
만약 할 줄 모르면 눈이 빠지게 계산을 해야 할 것이고..



이렇게 코드에 의하여 상위계정,하위계정을 찾아서 처리하는 작업은
재무관련뿐만 아니라 모든 코드를 사용하는 작업에서 유효할 것이니
잘 챙기시기 바란다

이런 경우는 재귀용법으로 처리하지만 ..
학습을 위하여 일반적인 방법으로 풀어서(중복되는 구문이 발생)하도록 하자
코드의 자릿수가 5개정도로 정해져있으니까..재귀방법을 쓰지 않고 쉽게 가자

또한 값만 만들어 줄 것인가?
아니면 하위계정의 주소를 찾아서 수식으로 넣어줄 것인가 하는 문제가 있다
대개의 담당자들은 값에 대한 근거가 무엇인지 알고 싶어 한다
그러니 수식을 만들어 넣어주는 것이 좋을 것이다
수식을 만들어 넣은후 필요하면 값으로 바꿔주는 일은 간단할 것이니까..

엑셀은 원하는대로 즉시,즉시 구현해줄 수 있는 참 좋은 녀석이다
어떤 프로그램도 엑셀의 순발력을 쫓아 올수 없다

우리가 손으로 계산한다면 어떻게 할까..
작업순서가 하위계정부터 계산하여 위로 올라가는 것이 좋을 것이다
그러나 수식으로 한다면 위에서 부터 아래로 해도 상관 없는 일일 것이다
여기에서는 아래에서 부터 위로 말아 올라가는 순서로 해보자
그러려면 우선 맨 하위의 상위레벨의 코드만 주욱 골라서 어딘가 모아놓은후
이것을 다시 순환하면서 해당 코드의 바로 밑 하위의 코드의 주소만 찾아서
수식으로 연결하여 해당 코드의 셀에 넣어주면 된다
이렇게 한것을 한단계 더 올라가서 똑같은 짓을 하면 된다
이렇게 똑같은 짓을 사람이 하면 깝깝하고 컴퓨터에게 시키는 것이 컴퓨터의 활용이다

여기에서 바로 상위코드들을 모아 놓는다고 할때..배열을 사용할수도 있고
집합체(Collection)를 사용할 수도 있다
Collection을 사용하는 것이 편리할 것이고..

위와 같은 로직을 코딩하면 될 것이고
또 중요한 것은
메뉴를 눌러서 명령을 하거나 UserForm을 만들어서 명령을 하게 하던가
방법을 결정하여야 할 것이다
사용자에게 받아야할 정보가 많다면 UserForm같은 콘트롤을 사용하는 것이 좋고

어떤 정보가 필요할까?
가장 중요한 것은
코드열이 정상적인지 알아야 할 것이다
그리고 합계계정을 넣을 열이 어떤 열인지도 알아야 할 것이다
예를 들어서 앞페이지에서 만든 표준양식중에서 어떤 테이블은 [레벨]이라는 열을
삭제해 버릴 수도 있다..
[레벨]열은 실은 필요 없는 열인데 일부러 하나 삽입하여 놓았다
테이블의 활용에 있어서 중요한 변수로 작용하는 것이 입력정보가 들어있는
열의 위치의 불규칙일 것이다
그래서 표준화를 시키는 것이 좋지만 항상 예외라는 것이 있는 것이다



그런 표준에서 이리,저리 벗어나기 좋은 것이 또한 엑셀이기도 하고
그러니 민감하게 상황적응을 VBA에서 해주면 되는 것이다

엑셀을 하면서 코드의 중요성을 모르시는 분들이 참으로 많다
몇일전에 다룬 화일의 내용중에 아래의 그림과 같이 코드를 입력하는 분들의
입맛에 맞게 띄어쓰기를 하는 등의 나름대로의 표현을 한다



프로그래밍을 진행한다기 보다는 기본적인 화일과 정보의 입력부터
다시 챙겨보아야 하는 상황이 많다
띄어쓰기가 잘못된 것이 있다면 문자열함수로 적절히 가공하여 하면
되겠지만..그러다 보면 프로그래밍이 누덕누덕 누더기가 된다
아무튼 이런 상황이 많이 발생하면 처음부터 표준화를 정립한후
작업에 들어가는 것이 더 빠르다는 것을 아시기 바란다

지금 하는 이 페이지는 코드의 표준화에서 부터 다져나가는 것이니
그런 문제는 당연히 배제되지만 여러분들이 다른 소루션의 문제를 접할때
항상 먼저 점검하여야할 부분인것이다

또한 합계계정의 합계를 한다!!라고 할때
이것을 그냥 메뉴만 크릭하여 활성화된 시트의 내용을 분석하여 처리할 것인지
아니면 사용자가 범위를 지정하게 하여야 할지의 문제가 있다
좋은 소루션은 사용자가 창의적으로 일을 하고 통제하고 관찰할수 있어야 한다
그러니 프로그래머만 좋자구..한꺼번에 후르룩 돌려버리는 것은
사용자의 신뢰를 얻을 수 없다

InterActive한 Interface를 잘 제공하는 것이 중요할 것이다
아래의 그림과 같이 엑셀을 위하여 특별히 만들어진 RefEdit콘트롤을
사용하는 것이 좋을 것이다..이것은 Reference Edit의 약자다
즉 범위를 선택하고 편집한다는 콘트롤이다
아래의 그림과 같이 만들어 넣고



메뉴를 크릭하면 UserForm이 뜨게 하고
UserForm이 뜬후의 모든 작업은 UserForm의 모듈시트에 처리하도록 한다

UserForm이 뜨면서

Private Sub UserForm_Initialize()
Me.RefEdit1.Text = ActiveSheet.Name & "!" & Selection.CurrentRegion.Address
End Sub

사용자가 시트상에 선택한 범위의 CurrentRegion을 선택하고
CurrentRegion의 주소를 UserForm의 RefEdit콘트롤의 Text속성에
담아 준다
이때 범위의 주소만 주지 말고 시트명까지 주는 것이 이 콘트롤의 입맛에
맞는 형식이 된다

이렇게 선택된 후에도 사용자가 다시 직접 마우스로 범위를
재설정할수 있는 여유를 주게 된다

UserForm의 [합계계정수식입력]버튼을 크릭하면 선택된 범위가 유효한 테이블인지 확인후 합계계정의 코드별로 자식계정을 찾아서
합계가 되는 수식을 만들어서 각각해당 셀에 입력하게 된다

아래 화일에 상세히 설명하였으니 이해하시는데 많이 도움이 되었으면 좋겠다

***[LOG-IN]***