안녕하세요! gbgg입니다. 엑셀 자산관리용 가계부 만들기 4편입니다!
이번 포스팅에서는 설정 창을 따로 만들어 사용자가 항목을 변경할 수 있도록 구현하고,
엑셀 함수를 vba에서 사용하는 법도 소개하겠습니다.
아래 자료는 자산관리용 가계부 만들기 4~5편의 예제입니다.
UI 만들기
가장 먼저 가계부에 필요한 메뉴를 정리해보겠습니다.
- 메인화면
- 달력
- 계좌관리
- 지출 현황
- 수입 현황
- 설정
가계부에서 기본적으로 필요한 항목들로 정리해보았는데요.
이렇게 총 7개의 시트와 DATA 시트까지 8개의 시트에서 UI를 구성해보겠습니다.
먼저 시트 복사를 사용하여 시트를 생성해봅시다.
이제 이 항목들을 사용자가 쉽게 사용할 수 있도록 UI를 만들어 보겠습니다.
디자인을 위와같이 구성하려 하는데 각 시트의 제목에 맞게 셀 색을 변경해주어야 합니다.
이때 서식 복사를 사용하면 편하게 작업할 수 있습니다.
서식 복사란?
현재 셀의 모든 서식을 다른 셀로 복사하고 싶을 때 사용합니다.
Ctrl+C(Copy)와는 다르게 셀의 데이터는 옮겨지지 않고 셀의 서식만 복사됩니다.
(표시 형식, 셀 배경, 글꼴 색, 글꼴, 가운데 정렬, 들여 쓰기 등 모두 포함)
이렇게 시트 디자인을 반복적으로 꾸밀 때 '서식 복사'를 사용하면 편하게 작업할 수 있습니다.
1. 서식을 복사할 셀을 선택
2. 서식 복사 클릭
3. 서식을 복사할 대상을 선택
복사할 서식을 선택하고 '서식 복사'를 누른 후 이 서식을 붙여 넣을 셀을 선택하면 됩니다.
컨트롤 서식
이번에는 '계좌관리' 시트에서 양식 컨트롤(단추, 콤보상자)을 사용하여 입/출금 정보를 입력할 수 있는
시트를 구성해보겠습니다.
양식 컨트롤(단추, 콤보상자)을 '계좌관리' 시트에 삽입하고 아래와 같이 디자인해보겠습니다.
해당 시트에서는 날짜와 구분 1(입/출금), 구분 2(월급, 의류, 식비 등), 계좌(은행 이름), 금액으로 구성하고
구분 1, 구분 2, 계좌에 대한 내용은 보통 고정해서 사용하므로 컨트롤 서식을 사용하여 UI를 구현해보겠습니다.
콤보상자 설정 항목 만들기
먼저 콤보상자에서 설정할 수 있는 항목을 구성해야 합니다.
콤보상자의컨트롤 서식 - 컨트롤 에는 입력 범위와 셀 연결이라는 항목이 있습니다.
이 항목을 사용하여 콤보박스 내에 들어가는 항목을 구성할 수 있습니다.
자세한 내용은 아래 포스팅을 참조해주세요!
[Excel] 3. 능력있는 직장인이 되는법! 물품 입고시키기
자 그럼 이제 콤보박스에 들어갈 항목을 '설정' 시트에 정리해 보겠습니다.
'설정' 시트에 위와 같이 콤보박스에 들어갈 내용들을 정리해보았습니다.
이제 '계좌관리'에서의 콤보박스들과 연결해보겠습니다.
드롭박스를 선택한 후 '셀 서식'으로 이동합니다.
입력 범위와 셀 연결이 있습니다. 다음과 같이 지정해줍니다.
입력 범위는 위와 같이 맨 아래칸을 제외한 나머지 범위를 선택해줍니다.
셀 연결은 맨 아래 셀을 선택해줍니다.
콤보박스에서 선택한 항목에 따라 셀 연결에서 설정한 셀의 값이 변경됩니다.
콤보박스에서 '출금'을 선택한 뒤 설정 시트로 이동하면
위와 같이 '셀 연결'에 설정해놓은 셀에 선택한 항목의 INDEX가 표시되게 됩니다.
양식 컨트롤(단추)
작성자가 입/출금 내역을 입력할 때 날짜를 일일이 작성해야 한다면 굉장히 번거롭겠죠?
버튼을 추가하여 현재시간이 자동으로 입력되도록 만들어보겠습니다.
날짜 항목에 '현재시간 입력'이라는 버튼을 추가하였습니다.
버튼을 누르면 저 셀에 현재 시간이 입력되도록 vba를 사용하여 만들어보겠습니다.
버튼 클릭 이벤트 추가에 대한 내용은 아래 포스팅을 참조해주세요!
[Excel] 1. 능력있는 직장인이 되는법! 엑셀 자동화란?
Sheets("계좌관리").Range("E6").Value = Now() |
=now()라는 함수 혹시 기억나시나요?
현재시간을 표시해주는 함수입니다. vba에서도 이런 함수들을 일부 사용할 수 있습니다.
버튼을 누르면 위와 같이 입력됩니다. DATA 시트에서는 연, 월, 일만 사용해야 하므로 데이터 형식을 변경하겠습니다.
위와 같은 형식으로 설정해주면 됩니다.
날짜 값 추출
현재 데이터 시트는 다음과 같은 형식으로 되어있습니다.
달력 기능에서 일별로 데이터를 뽑아내기 위해 따로따로 저장한 것인데요,
위 방식대로 데이터를 저장하려면 현재 합쳐져 있는 날짜를 분할하여 따로따로 기록해야 합니다.
이 작업은 vba로 진행하겠습니다. 우선 날짜 데이터 형식을 바꿔봅시다.
yyyy-mm-dd 형식으로 설정합니다.
이제 이 하나의 날짜 값 안에 들어가 있는 yyyy, mm, dd를 vba에서 분리해보겠습니다.
- 연도를 구하는 함수 : =YEAR(연도를 구할 셀)
- 월 값을 구하는 함수 : =MONTH(월 값을 구할 셀)
- 일 값을 구하는 함수 : =DAY(일 값을 구할 셀)
함수로는 이렇게 간단하게 추출할 수 있는데 이 함수들을 엑셀 vba에서도 그대로 사용할 수 있습니다.
Sheets("계좌관리").Range("E8").Value = Year(E6) |
실행시켜보겠습니다.
연도 값을 추출했으니 '2018'값이 출력되어야 하는데 1899라는 이상한 값이 출력되었습니다.
엑셀 vba에서 E6을 셀의 value가 아닌 셀 자체로 인식했기 때문입니다. Year(E6)의 코드를 조금 수정해 보겠습니다.
Year(Sheets("계좌관리").Range("E6").Value) |
Sheets("계좌관리").Range("E8").Value = Year(Sheets("계좌관리").Range("E6").Value) Sheets("계좌관리").Range("F8").Value = Month(Sheets("계좌관리").Range("E6").Value) Sheets("계좌관리").Range("G8").Value = Day(Sheets("계좌관리").Range("E6").Value) |
위와 같은 방식으로 작성하면 됩니다. 한번 확인해 보겠습니다.
성공적으로 날짜 값이 분리되는 것을 확인할 수 있습니다.
엑셀 자동화
이번 포스팅에서는 가계부 UI를 구성할 때 필요한 여러 기능들을 소개해보았습니다.
서식 복사, 컨트롤 서식, 버튼, 콤보박스 등 엑셀을 자동화할 때 정말 많이 사용되는 기능들입니다.
이 기능들을 사용하여 가계부 UI를 멋지게 구성해봅시다!
궁금한 점이나 추가 요청사항은 댓글로 남겨주시면 답변 달아드리겠습니다!
능력 있는 직장인이 되기 위해 엑셀로 전산프로그램을 만들 때까지 한번 열심히 달려봅시다!
다음 포스팅에서 뵙겠습니다!
최근댓글