초보용

왕 초보용 엑셀 매크로(VBA) 배우기 - 6 (매일 10페이지 책읽기 프로그램 1/6)

by 지천명영어 posted Jan 12, 2022
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

가 크게 작게 위로 아래로 댓글로 가기 인쇄

엑셀 매크로(VBA) 배우기 위해 마이크로 소프트사에 직접 전화했습니다. 

​

엑셀을 처음으로 접하게 된 것은 회사 생활을 시작하며서, 동료 직원들이 사용하는 주판(주산) 계산 능력을 따라잡기 위함이었으나, 실제로 엑셀을 직접 접한게 된 것은 조금 더 회사 생활을 한 이후입니다.

왜냐하면, 회사 생활을 시작하게 된 시점은 PC에 윈도 3.1이 설치되어 있었으나, 활용할 수 있는 프로그램이 없었습니다. Dos가 여전히 주력 프로그램이기 때문이었습니다.

​

그래서, 회사에서 공급한 컴퓨터용 계산 프로그램은  금성소프트웨어(LG)에서 Hana spread sheet로 로터스123, 쿼트로 프로 등에는 없는 깔끔한 표를 만들어주는 훌륭한 프로그램이었습니다. 또한 일부 부서에서는 엑셀의 전신인 멀티 플랜(MP)를 이용하기도 하였습니다.

​

그러나, 이들 프로그램은 수식 계산은 대동소이 하나 한계는 바로 매크로이었습니다.

하나 스프레드시트, 로터스123, 쿼트로프로, 멀티플랜에 있는 매크로는 단순한 순차 기록 매크로였으며, 현재와 같은 엑셀 VBA 매크로는 아니었습니다. VBA매크로는 아마도 엑셀 5.0부터로 생각됩니다.

​

엑셀에 엑셀 VBA 매크로 가 더해지고, 막강한 줄긋기 기능이 확보되자 대부분 사무환경은 워드에서 엑셀로 넘어가게 됩니다. 숫자가 별로 필요 없는 단순한 Document 조차 엑셀에서 작성하는 사례가 늘어나게 됩니다.

​

이 당시, 제가 엑셀을 스스로 공부하면서 저지른 무지한 행동 한 가지를 소개합니다.

엑셀이 초창기에는 참고할만한 도서도 많지 않았고, 제 컴퓨터에 대한 얕은 지식으로 궁금한 사항이 생길 때, 한국 마이크로소프트에 직접 전화를 걸어서 엑셀의 기능에 대해서 물어보곤 했습니다.

​

아마, MS 회사에서 상담을 해주시는 분들이 지금과 같은 콜센터 직원이 아니고, MS 직원이라 엑셀 사용법을 가르쳐 줄 수 있었던 것으로 생각됩니다. 약 3번째쯤 제가 궁금한 점을 질문하고 MS 직원은 답변한 뒤에, MS 회사는 엑셀의 사용법을 가르쳐 주는 곳이 아니며, MS에서 구입한 엑셀이 설치가 안 될 경우에 지원을 해 주는 곳이라고 합니다. 즉 더 이상 단순 사용법은 질문은 곤란하다고 저에게 알려줍니다. 

​

그 뒤에 저는 엑셀 활용 책자를 구입하고, 직접 책 저자에게 전화해서 엑셀을 배웠던 기억이 납니다. 너무 친절한 엑셀 책 저자님, 그러나 답변을 이해할 수 없었던 저의 짧은 지식이었습니다.

​

지금 돌이켜보면, 무지한 행동들이었습니다.


 

지금까지 배웠던 엑셀 매크로(VBA)는 VBA 코드에 집중했으나, 이번에는 VBA 코드가 에러가 발생할 때 필요한 디버깅에 대하여 알아보도록 하겠습니다.

​

실제로 저는 디버깅을 거의 하지 않습니다. 대부분 MsgBox로 해결해 왔습니다.

​

그 이유는 제가 만드는 엑셀 코드는 기껏해야 20줄 이내입니다. 디버깅을 할 필요가 없었기 때문입니다.

​

그래서, 엑셀로 해결하기 쉽지 않은 문제를 풀어나가는데  디버깅을 할 필요가 없는 사례를 찾아보았습니다.

아래의 사례는 2020년 3월에 네이버 지식인에 질문으로 등록된 것입니다.

​

조건은 다음과 같습니다.

 


자신은 하루에 책 읽기를 매일 하고자 계획합니다.

그래서, 책을 구입하면 매일 10 페이지씩 읽을 것이라, 일자별로 시작 페이지와 끝 페이지를 알고 싶고,

특정한 날에 10 페이지를 읽지 못하거나 더 읽게 되면, 그 페이지를 기준으로 앞날의 계획을 수정하고 싶다는 조건입니다.


 

일견 아주 쉬운 질문으로 보입니다. 그런데 실제로 약 5시간이 경과하도록 네이버 지식인에서 아무도 답변을 하지 않았고, 질문자는 스스로 무리한 질문으로 생각해서인지 질문을 삭제해서 지금은 없어진 상태입니다.

​

위 질문을 엑셀로 구현하기 쉽지 않은 이유는 바로 단순한 조건이 아니기 때문입니다.

​

- 첫째, 매일 10페이지씩 구분한다(쉬움)

- 둘째, 끝 페이지가 10페이지가 아니면 그날 이후 페이지를 수정한다(쉬움)

​

하지만, 2번째 조건은 단 1번 발생하는 것이 아니라, 수차례 발생할 수 있다는 점이 문제를 어렵게 만듭니다.

​

제 생각에는 사무환경에서 발생하는 엑셀 문제는 이 이상 어려운 조건은 거의 없을 것으로 생각됩니다.

만약 이 정도 난이도 엑셀 문제를 스스로 해결한다면, 대부분 업무 중에 발생하는 일은 엑셀로 해결 가능합니다.

 

이미지 048.png

 

 

먼저, 위와 같이 엑셀에 필요한 서식을 만들었습니다.

구입한 책의 첫 페이지와 끝 페이지 정보, 그리고 매일 읽고 싶은 페이지를 정의합니다.

​

1. 매일 10페이지씩 책 읽기 매크로(VBA) 코딩하기

​

이것은 아주 단순합니다.

 

이미지 049.png

 

 

총 18줄로 작성된 코드입니다.

​

첫째, 파란색 박스는 책의 첫 페이지, 마지막 페이지, 그리고 증감 페이지를 지정합니다.

둘째, 빨간색 박스인 Do While Loop를 실행합니다.

Do While Loop는 For Next와 아주 유사합니다. 

 


Do While i_end >= i_start 

​

      i_start = i_start + 증감 페이지(i_step)

​

Loop


 

Do While Loop 속에서 시작페이지를 증감 페이지만큼 늘리고, 그 늘린 숫자와 마지막 페이지를 비교해서, 마지막 페이지 보다 작을 때까지 계속 루핑 하라는 명령입니다.

​

위 매크로(VBA) 코드를 실행하면, 다음과 같은 결과가 나오게 됩니다.

​

이미지 050.png

 

 

즉, 책을 새로 사서 매일 10페이지를 읽는다면,  13일 만에 전부 읽게 됩니다.

​

이제 네이버 지식인에 질문한 질문자의 첫 번째 조건을 매크로(VBA)로 만들었을 뿐입니다.

​

​

다음번에는 질문자의 두 번째 조건에 대해서 알아보도록 하겠습니다.

​

그리고, 사실 이곳에서 살펴본 것처럼, 엑셀은 디버깅이 크게 필요없습니다. 보시는 것처럼, 엑셀은 VBA코드를 작성하면서 동시에 결과를 즉시 눈으로 보고 확인하기 때문에 바로 코드를 고칠 수 있습니다.

뿐만 아니라, 대부분 프로그램 코드를 짧게 만들 수 있기에 프로그램 단계별로 디버깅할 필요가 없습니다.

​

어째든 다음 회차에 질문자의 두번째 조건과 디버깅에 대해서 알아보겠습니다.

​

(엑셀 파일 첨부하지 않습니다. 직접 타이핑해서 연습해 보세요)

​


Articles

1 2 3