VBA

Excel – VBA : 가계부 만들기1

안녕하세요 채랑이 아빠 프리아입니다. 오늘은 엑셀을 사용해서 가계부를 만들어 볼겁니다.그냥 엑셀을 사용해서 만드는 거라면 누구라도 만들수 있겠죠 ^^저희는 VBA가 추가된 가계부를 만들겁니다. VBA를 사용할 경우 간단하게는 자동으로 수식을 넣게 만들 수 도 있구요,가계부 입력할 내용을 팝업으로 띄워서 입력하게 만들수도 있습니다.두가지 모두 VBA를 사용하는 방법이라고 할 수 있습니다. 먼저 VBA를 사용하여 자동으로 수식을 넣는 방법을 알려드리겠습니다. 우선, 가계부 틀을 잡아야겠죠.틀은 다음과 같이 잡아보도록 하겠습니다. 심플하죠? 일반적으로 많이 볼 수 있는 형태로 잡았어요.자 이중에서 자동 수식을 걸 수 있을 만한 곳은 총 2곳입니다.No.와 잔액입니다.나머지는 다 입력해야지만 되는 항목들이죠. VBA를 걸 내용은 다음과 같습니다. – 일자, 입금, 출금, 비고 중에 값이 입력되면 수식을 자동 입력한다. 일단 우리가 알아야 하는 데이터는 2가지입니다.셀을 이동했을 때, 이전의 셀의 Row값과 Column값이죠. 일단 이전 셀의 Row값과 Column값을 입력할 전역 변수를 지정할 것입니다. 일단 Alt+F11을 눌러서 VBA 창을 띄우세요. 이렇게 보이면서 Sheet1이 선택되어 진것이 보입니다. 옆에 칸에다가 다음과 같이 입력합니다. Dim r, c As Integer Dim은 변수를 선언하는 구절입니다.변수의 이름은 r과 c이며, 타입은 정수입니다. r은 Rows의 약자이며, c는 Column의 약자입니다.이렇게 변수명은 자신이 알아보기 쉬운 것으로 하는 것이 좋습니다.다만, 너무 변수명을 디테일하게 잡으시면 에러가 발생할 수 있습니다.쉽게 말해 변수를 rows로 잡아버리면, VBA 명령어 중에 있는 Rows라는 명령어와 중첩이 되어버리기 때문에 구절 오류가 발생합니다.그래서 row_check나, r 등 단어+추가문구 또는 완전 약자의 형태로 잡으시는게 좋습니다.전 길게 쓰는게 싫어서 그냥 1글자로 퉁쳐요 ㅎㅎㅎㅎ. public나 private 문구 안이 아닌 밖에 Dim으로 선언한 변수의 경우 모든 하위 집단에서 사용할 수 있다는 장점이 있으며,하나의 명령어 집단이 완료되어도 해당 변수는 유지된다는 장점이 있습니다.(public나 private 구절안의 변수는 해당 명령어가 종료되면 변수가 사라짐)다만, 너무 많은 전역 변수를 사용할 경우 용량이 커지고 느려진다는 단점이 있습니다. 자, 이제 셀이 바뀌는 부분을 지정해 보겠습니다.명령어 입력창 위에 (일반)이라고 되어있는 부분의 선택창을 눌러서 Worksheet를 선택합니다.그러면 옆에 (선언)이라고 되어 있는 선택창이 자동으로 SelectionChange로 바뀌면서 밑에 Private 명령어 구문이 생기는 것을 볼 수 있습니다.(만약 (선언)이 그대로 있거나, 다른 명령어가 나온다면, SeletionChange를 선택해 주세요.) 위와 같은 창이 나온다면 일단 제대로 되고 있는 것입니다. 일단 셀이 바뀌면, 현재 셀을 어떻게 표현하는지 임시로 다음과 같이 문구 입력해서 테스트 해보시길 바랍니다. MsgBox “Rows : ” & Target.Row & ” / Columns : ” & Target.Column 입력하셨으며, 엑셀 시트로 가셔서 마우스로 여기저기 눌러 보시면 다음과 같은 창이 뜨는 것을 볼 수 있습니다. C5가 선택되었죠. 행은 5이며, 열은 C이니까 3입니다.정확하게 지금 선택한 셀의 값이 나오게 됩니다. 다만, 저희는 이전에 선택한 셀에 값이 바뀌었는지 확인해야 하므로, 이전 셀을 나타낼 수 있도록 변수를 이용해야 합니다.즉, 행과 열의 번호를 변수로 지정하여, 이전셀을 나타낼 것입니다.다음과 같이 입력하겠습니다. MsgBox “Privious – Rows : ” & r & ” / Columns : ” & c & Chr(13) & Chr(10) & “current – Rows : ” & Target.Row & ” / Columns : ” & Target.Column 중간에 chr(13) & chr(10)은 줄을 바꾸는 명령어 입니다.다음과 같이 된 것을 확인하셨으면, 또다시 엑셀을 이동해 보세요. 처음 이동시에는 이전 셀의 위치가 제대로 나오지 않습니다.당연히 값을 지정하지 않았으니까입니다. 하지만 2번째부터는 이전셀과 현재 셀을 정확하게 나타내는 것을 볼 수 있습니다.메세지창을 띄우고 r과 c의 값을 바꾸기 때문입니다. 즉 이전셀을 확인하기 위해서는 r과 c의 값을 지정하기 이전에 모든 명령어가 종료되어야 한다는 뜻입니다. 자 이제 필요한 내용을 채워보겠습니다.필요한 조건은 2가지입니다.첫번째는 이전 셀이 최상단의 제목이 아니어야 하며, 두번째는 A열과 E열이 아니어야 한다는 것입니다. 제목셀에 내용이 있다고, No.와 잔액에 다른 글자를 넣어버리면 큰일 나겠죠.그리고 A열과 E열은 수식이 들어가야 하는데 여기에 다른 값을 넣어도 안되겠죠.그런 것입니다. ㅎㅎㅎ 다음과 같이 내용 입력하겠습니다. 맨 위와 두번째 IF문은 첫번째 실행할 때, 행과 열값이 없으면 오류가 나기 때문에 기본값으로 1을 넣어 주었습니다.세번째의 IF문은 이전 셀의 행 값이 1보다 커야 하고, 열 값이 1(A열)과 5(E열)이 아니면서 이전 셀 값이 공백이 아닐 경우 실행하라는 내용입니다.즉, 1행이거나, A열이거나, E열이면 실행을 하지 않고, 또한 셀 값이 변경되지 않았으면 실행하지 않도록 설계한 것입니다.네번재 IF문은 r이 2일 경우인데요, 즉 이전 합계액이 없을 경우에는 입금값은 더하고 출급값은 빼고, 2이상일 경우 합계액에서 입금값은 더하고 출금값은 빼라는 명령어입니다. 이렇게 하면 간단한 가계부의 수식 자동 입력은 끝났습니다.테스트 해보도록 할께요. No.와 잔액에 자동으로 수식이 입력되었나요?생각보다 어렵진 않죠?일단 이 정도에서 중간 저장을 하겠습니다.여기서 주의할 점이 하나가 더 있습니다.바로…. 저장 파일형식을 매크로타입(.xlsm)으로 해야 된다는 것입니다. 매크로 사용 통합문서로 저장하지 않으면, 다음에 열때 매크로가 사라져 있는 기적을 보시게 될 것입니다. ㅎㅎㅎㅎ여기까지 작업한 파일은 아래와 같이 올려두었으니 참조하시기 바랍니다. 자 오늘은 여기까지 입니다.간단한 VBA인데도, 처음 설명하니까 시간이 길어지네요. 오늘도 좋은 하루 보내세요.

Excel – VBA : 가계부 만들기1 더 읽기"

Excel – VBA : 매크로(Macro)와 VBA의 기초

안녕하십니까 채랑이 아빠 프리아입니다. 오늘도 취미활동을 엑셀을 올릴 예정입니다. 다만, 너무 수식만 하니까 제가 재미가 없어지는 듯하여 VBA를 섞어서 올리도록 하겠습니다. ㅎㅎㅎ원래 제 전문은 엑셀 수식보다는 VBA 쪽이라고 할까요 ^^;;솔직히 전문까지는 아니구요… 다만 비주얼베이직을 많이 공부했던바 있어서, 다른 분들보다 조금 더 깊게 알고 있을 정도입니다.(그래도 정보처리기사 자격증은 있다구요… 하긴 공과대학교 나온 사람 중에 그거 없는 사람이 몇이나 된다고 ㅠ.ㅠ) 그래서 오늘은 VBA 입문을 위한 매크로 연결 기초를 설명 드리겠습니다. 일단 VBA를 설명드리려면 매크로를 먼저 설명드려야 합니다.엑셀에서 매크로 기능이라고 하면, 일련의 행동을 그대로 기록해 두었다가,나중에 실행하면 매크로의 기록된 작업이 그대로 반복하는 행위를 말합니다.게임에서도 매크로라는 말을 쓰는데요, 동일하고 같은 작업을 반복하는 행위를 뜻하죠. 매크로 기능은 보기 > 매크로 > 매크로 기록을 누르시고 일련의 행동을 만들면 됩니다.일단 간단하게 A1에는 “매크로 테스트”, B1에는 “2022-11-14″을 기록해 보도록 하겠습니다.간단하게 보기 > 매크로 > 매크로 기록을 누르시고, 매크로 이름은 매크로1로 그냥 두시고 확인을 누르세요.그 다음에 A1과 B1에 지정한 문구를 넣으시고, 보기 > 매크로 > 기록중지를 누르세요.그러면 하나의 매크로가 만들어집니다. 자 그럼 이 매크로를 어떻게 사용하느냐… 바로 버튼을 만들어서 사용하시면 됩니다.버튼이라고해서 거창한 것은 아니구요.삽입 > 도형에 들어가셔서 아무모양이나 넣으시면됩니다. 저는 사각형 : 빗면(버튼 모양)을 넣을 겁니다.그리고 해당 도형을 마우스 우측 클릭하신 후 매크로 지정을 누릅니다.그리고 좀전에 기록한 매크로1(이름을 바꾸셨다면 바꾸신 이름을 선택하시면 됩니다.)을 누르시고 확인 버튼을 눌러줍니다. 자, 그럼 아까 넣었던 A1셀과 B1 셀의 내용을 지우시고, 매크로 버튼을 눌러보세요.참고로 첫번째 값은 현재 지정되어 있는 셀에 입력될 확률이 큽니다. 왜냐하면, 매크로 기록은 입력칸을 기준으로 하는 것이 아니라, 매크로를 시작할 때의 셀(현재 셀)이 기준이기 때문입니다.그래서 만약 C1에서 매크로를 시작한다면, C1에 “매크로 테스트”, B1에 “2022-11-14″라고 입력될 가능성이 큽니다.다만, 매크로 시작할대 A1이 아닌 다른 셀에서 시작하고 A1으로 옮겨서 “매크로 테스트”라고 쓰셨으면, A1셀에 데이터가 입력될 것입니다. 저는 어디에 나오냐구요? 안 가르쳐주기 위해서 A1셀을 누르고 버튼을 누를꺼에요 ㅋㅋㅋㅋ 이런게 매크로 기능입니다. 다만, 매크로 기능의 경우 한계가 명확합니다. 딱 지정된 행동만 하기 때문에 조건에 따른 내용이라던지, 지정된 사유에 대한 입력 등을 할수 없기 때문입니다.그래서 매크로의 상위 기능으로 VBA를 사용하는 것입니다. VBA는 Visual Basic For Applications의 약자로 비주얼베이직 언어를 엑셀에다가 융합한 기능입니다. 일종의 프로그래밍 언어입니다.다만, 비주얼베이직 언어는 계속 변경되는데 반해 엑셀에서 사용하는 VBA는 비주얼베이직 6.0 버젼 수준에서 멈추어 있습니다.그 점은 참조하여 주시기 바랍니다. 일단, 오늘은 VBA의 기초만 알려드릴 것이기 때문에 기능의 실행만 알려드리고 끝내겠습니다.틈틈이 사용할만한 수식들 알려드릴께요. ^^아니면 저한테 개인적으로 질문해 주시면 알려드리겠습니다.(홈페이지 오른쪽 아래에 보시면 관리자 문의라고 게시판이 연결되어 있어요. 엑셀문의라고 써 주시면 제가 알고 있다면 알려드리겠습니다.) 자 오늘은 A1셀에 “VBA 테스트”, B1셀에 “2022-11-14″을 입력하고, 메세지 박스를 띄워 “Welcome to VBA World”를 써 보겠습니다.웰컴 문구는 모든 프로그래밍 언어를 배울때 최초로 배우는 문구 식이에요 ㅎㅎㅎ. 그래서 저도 그래요(공돌이의 본능입니다.) 일단 엑셀에서 Alt + F11을 눌러주시면 Microsoft Visual Basic for Applications – 통합 문서1이라는 창이 열리는 걸 볼 수 있습니다. 왼쪽에 프로젝트라는 창에는 현재 열려있는 모든 엑셀 문서들이 다 나타나요. 그중 VBA를 적용할 문서를 선택하시면 됩니다.(자동으로 선택되어 있어요.)저기서 모듈이라는 폴더 옆에 +를 누르시면 Module 1이라는 게 보일것입니다. 그걸 더블클릭하시면, 아까 실행한 매크로1의 수식이 나타날 거에요. 저 수식이 매크로1에 저장된 수식입니다.설명해 드릴 수는 있으나, 나중에 하나씩 알려드리다 보면 설명드려야 하는 내용이라서, 오늘은 그냥 패스하겠습니다. 자 End Sub 밑에 엔터키를 눌러 공백을 늘려주시구요.Sub VBA_Test()라고 입력하고 엔터키를 눌러주세요. 그러면 이전 End Sub 밑에 줄이 나타나고, 새로운 End Sub가 나타나는 것을 볼 수 있습니다.Sub는 하위 명령어를 시작한다는 명령이며, End Sub는 해당 명령이 끝났음을 알리는 명령어입니다.즉 Sub와 End Sub 사이의 내용이 VBA 명령어를 실행하는 구문이 되겠습니다. A1셀과 B1셀에 내용을 입력하는 명령어는 다음과 같습니다. Range(“A1”).Value = “VBA 테스트”Range(“B1”).Value = “2022-11-14” Range()는 범위를 선택하는 명령어입니다.“A1” 처럼 하나의 셀을 지정할수도 있지만, “A1:A10″처럼 범위를 지정할 수도 있습니다.그리고 뒤에 있는 .Value는 입력된 값을 의미합니다.Range()뒤에 점을 찍으면 사용할 수 있는 명령어가 여러개 나오게됩니다.이중에서 .Value는 해당 범이에 들어가는 내용을 의미합니다.(나중에 설명하겠지만, 복사도 할 수 있고, 셀 서식을 바꿀 수도 있고, 범위 지정에서 할 수 있는 여러가지 기능을 수행할 수 있습니다.) 또한, Cells 명령어를 사용할 수도 있습니다.Cells명령어를 사용할 때는 다음과 같이 입력해야 합니다. Cells(1,1).Value = “VBA 테스트”Cells(1,2).Value = “2022-11-14” Cells의 명령어 뒤에 숫자는 반드시 행이 먼저이고, 열이 나중이어야 합니다.즉, A1셀은 (1,1)이지만, B1은 (1,2)입니다. – 1행 1열(A열), 1행 2열(B열)임 결과는 동일합니다. 그리고 마지막으로 메세지 박스를 띄우는 명령어는 다음과 같습니다. msgbox “Welcome to VBA World” msgbox 뒤에 따옴표를 넣어서 글자를 입력하는 것이 가장 기본적인 형태입니다.이 외에도 위에서 사용한 Range()나, Cells()를 사용하여 메세지 박스를 띄울수도 있습니다.예를 들면 다음과 같습니다. msgbox Range(“A1”).Value 참 쉽죠? ㅎㅎㅎㅎ 이거 해보고 싶었어요. 예전에 밥로스 아저씨 보면서 ㅋㅋㅋㅋ일단 위에 내용을 모두 포함하여 제가 만든 VBA 식은 다음과 같습니다. 보시면 Sub 밑에 시작할때 탭으로 한칸 안으로 들어간 것을 보실 수 있습니다.Sub 안에 있는 명령어를 구분하기 위하여 많이 사용하는 방식입니다.오늘 하는 것은 간단하기에 굳이 구분할 필요는 없지만, 이러한 방식은 꾸준히 적용하도록 습관화 하는것이 좋습니다.그래야 나중에 좀 복잡한 내용을 하더라도, 쉽게 구분할 수 있으니까요. 자 이제, 엑셀과 연결하겠습니다.아까 만들어 놓은 버튼을 마우스 우클릭하고 매크로지정을 누릅니다. VBA_Test를 선택하고 확인을 누릅니다. 그후 버튼을 좌클릭하면, 지정된 명령이 입력되는 것을 볼 수 있습니다. 위와 같이 입력되고 메세지 창이 뜨는 것을 볼 수 있습니다.(메세지 창은 한꺼번에 2개가 뜨지 않고, 확인 버튼을 눌러야 두번재 창이 뜹니다.) 흥미로우신가요? ^^오늘은 간단하게 입력하는 것을 알려드렸습니다.다음에는 실 사무에 적용할 수 있는 기능을 알려드리도록 하겠습니다. 오늘은 여기서 줄일께요. 즐거운 하루 되시기 바랍니다.

Excel – VBA : 매크로(Macro)와 VBA의 기초 더 읽기"

error: Content is protected !!