배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
엑셀 2000, 황기성님의 엑셀VBA 11일, Excel 2000

예제파일 내려받기

문서병합마법사예제파일

문서병합마법사


특별강좌 : 엑셀 문서 병합 인쇄 마법사 만들기

▶ 오늘 배울 내용

엑셀 문서 병합 인쇄 마법사 만들기 -1

가장 흔한 질문 가운데 하나가, 워드의 문서 병합 기능과 같은 것을 엑셀에는 없느냐 하는 것입니다. 엑셀의 기본적으로 그런 병합 기능은 제공하지 않습니다. 하지만, 엑셀의 기본 기능을 조금만 이용하고, VBA를 덧붙이면 그 어떤 것보다 편리하게 문서 병합을 할 수 있는 프로그램이 바로 엑셀입니다.

VBA를 배우시겠다는 분들은 어느 정도 엑셀의 기본 기능에 익숙하실 것이므로, 이에 대한 소개는 줄이고, 대신, 아주 간단한 예제를 가지고 문서 병합 마법사를 만들어 가는 과정을 차례로 안내하도록 하겠습니다.

부디 이 예제를 통해, VBA 프로그램에 대한 감을 잡으시길 바랍니다. 그럼, 시작합니다^^*

예제는 워드 유저 클럽에서 제공한 멋진 강좌에서 따왔습니다. 엑셀이 어떻게 워드 그 이상의 워드 기능을 발휘할 수 있는지 보여주기 위해서가 아니라...이런 것도 가능함을 보여주기 위한 것을임을 먼저 헤아려주십시오. 워드 유저 클럽 강좌는 아래와 같습니다. 아직, 못보신 분이라면 아래 링크를 참고하십시오.

편집 병합을 이용한 교육 이수증 만들기(1)
편집 병합을 이용한 교육 이수증 만들기(2)
편집 병합을 이용한 교육 이수증 만들기(3)


마법사 예제 파일은 두 개의 시트로 구성되어 있습니다. 이수증이란 이름의 양식 시트가 그 하나고, 명단이라고 하는 이름의 데이터 목록이 있는 시트가 그 하나입니다.

명단이라는 시트에 있는 목록의 범위를 선택해 Database라는 이름을 붙여두었습니다.(팁! 이름에 수식을 이용하면, 동적으로 데이터 범위를 확장할 수 있습니다. 예제 파일에는 Database라는 이름의 참조범위가 =명단!$A$2:$F$13로 고정되어 있습니다. 이 참조를 다음과 같은 수식을 입력해 변경해 보십시오. = OFFSET(명단!$A$1,1,0,COUNTA(명단!$A:$A)-1,COUNTA(명단!$1:$1)) 데이터가 추가되더라도 동적으로 그 범위를 자동으로 확장하게 될 것입니다. 자세한 것은 엑사모 일반팁란의 이름의세계를 참고하십시오)

이 양식 시트에서는 워터 마크 효과를 내기 위해 약간의 트릭을 사용하였습니다. 워크시트에 그림을 삽입하면, 이 그림은 언제나 셀 위에 위치하게 되므로 일반 워드 프로그램에서 제공하는배경 그림의 효과를 거둘 수 없습니다(잘 아시겠습니다만, 시트 배경을 그림으로 넣을 수는 있으나 인쇄가 되지 않습니다) 그래, 약간의 트릭을 이용해 워터 마크 효과를 거둘 수 있도록 했습니다. 이에 대해서는 아래의 팁을 참고하십시오.


팁! 그리기 개체에 워크시트 셀 연결하기 : 아래의 그림과 같이 그리기 개체와 워크시트의 셀을 수식을 이용해 연결하면 셀의 내용이 변동하면 그리기 개체에 표시된 텍스트로 연동되어 변하게 된다

 


함수를 이용하여 목록과 양식을 연결하기 : 엑셀 초보를 탈출하신 분이시라면 누구나 알고 계실 index함수를 이용하여, 이수증이라는 양식시트와 데이터 목록이 들어 있는 명단 시트를 아래와 같이 연결하였습니다.

B2셀에는 =INDEX(Database,$A$2,1)
A7셀에는 ="Microsoft " & INDEX(Database,$A$2,2) & "기초 과정"
A8셀에는 =INDEX(Database,$A$2,3) & "학년 " & INDEX(Database,$A$2,4) & "반 " & INDEX(Database,$A$2,5) & "반"
A9셀에는 =INDEX(Database,$A$2,6)
이라는 수식을 입력하고, 3개의 텍스트 박스에 A7, A8, A9셀을 위에 소개한 팁의 방법을 이용해 연결하였습니다.

A2셀의 값이 인덱스의 키값이 됩니다. 그리고 이 A2셀에는 _linkedcell이라는 이름을 붙여두었습니다. A2셀에 입력된 값에 따라 목록의 값이 차례로 이수증이란 양식 시트에 표시되게 됩니다. 초보자분 가운데 이 과정을 아직 따라하지 않으신 분이 계시다면, 먼저 반드시 이 이수증 양식을 따라 만들어 보시길 바랍니다.


이 예제 파일을 위한 일괄 인쇄 매크로는 아래와 같습니다

Sub dhSample()
Dim i As Integer
Dim j As Integer
j = Range("database").Rows.Count
If MsgBox("정말로 인쇄하시겠습니까?", vbYesNo + vbDefaultButton2, "연습예제") = vbNo Then End
For i = 1 To j
Range("_linkedcell") = i
ActiveSheet.PrintOut
Next i
End Sub

간단한 For Next문을 이용하여 데이터베이스의 행의 수만큼(Range("database").Rows.Count를 이용해 j라는 변수에 값을 담았습니다) 순환하면서, Range("_linkedcell")에 연결을 위한 값을 넣어준 뒤, 인쇄하는 것입니다.(나머지는 INDEX라는 엑셀 워크시트 함수를 이용해 이미 작업해 두었습니다)

이 매크로는 아마도 이 예제 파일에서는 훌륭하게 동작할 것입니다만, 범용적으로 사용하는 데에는 적당하지 않습니다. 물론 사용자가 언제나database란 이름의 목록과 _linkedcell이라는 이름의 연결셀을 이용해 작업한다면 가능한 일이긴 합니다만.

위의 예제를 직접 실행해 보시려면, ActiveSheet.PrintOut 대신, ActiveSheet.PrintPreView 메서드를 이용하십시오. 종이와 잉크를 절약하기 위해서는, 꼬옥^^*

이제 문서 병합 인쇄 마법사를 만들기 전에 준비 작업으로, 문서를 병합해야할 예제 파일을 만들어 보았습니다.

기억하실 것은, 이 문서 병합 인쇄 마법사를 이용하기 위해서는

1. 양식과 이 양식에 병합할 데이터 목록이 기본적으로 갖추어져 있어야 하며
2. 양식과 데이터 목록은 index함수나 vlookup함수와 같은 엑셀의 찾기 참조함수를 이용해 연결되어 있어야 하며
3. index함수와 vlookup함수의 키값 혹은 찾을 값으로 반드시 하나의 연결될 셀(위에서는 _linkedcell이라고 이름붙인 이수증!$A$2셀)이 있어야 한다는 것입니다.
4. 끝으로 인쇄할 양식 범위, 데이터 목록 그리고 연결할 셀에는 차례로 아래와 같이 약속된 이름을 사용한도록 합니다

인쇄할 양식 : _PRINTAREA
데이터 목록 : database
연결된 셀범위 :_linkedcell

(이 것은 필수적으로 요청되는 것이 아니라 선택적인 것입니다만, 작업의 편의를 위해 목록이나 연결할 셀에는 이름을 붙여두시는 것이 좋습니다)

그럼, 다음 시간에 본격적으로 문서 병합 인쇄 마법사를 만들어 보도록 하겠습니다*^_^*

목차 | 이전 | 다음