EXCEL - VBA
한글이 아닌 엑셀로 하는 메일 머지(3)
별동산
2024. 3. 29. 08:12
반응형
문제는 여기를 참고 바랍니다.
고지서__개별인쇄(예시).xlsx
0.02MB
3. 해법 2 : 이름뿐만 아니라 나머지 내용까지 매크로로 처리하는 방법
가. 논리
이번에는 셀 값을 Vlookup함수가 아니라 다른 시트의 셀 주소로 연결하는 방법과
같은 연번에서 이름이 반복될 경우 고지서에 한꺼번에 인쇄하는 매크로를 만들어 보겠습니다.
(1) 셀 값을 다른 시트의 셀 주소로 연결하기
예를 들어 고지서 시트의 회사명(성명)인 D6셀에는 명단 시트의 E열의 값이 입력되어야 합니다.
이 때는 연결키가 없어도 됩니다.
![](https://blog.kakaocdn.net/dn/bISxbc/btsFUF9DpnK/ldGR5ZoCdyJ5MrOgX6zMK0/img.png)
그리고, 토지 소재지인 시군, 읍면, 리동은 명단 시트의 G, H, i 열과 연결되면 됩니다.
(2) 같은 연번에서 이름이 반복될 경우 인쇄하기
"같은 연번"이란 병합된 셀로서 처리 줄과 윗 줄의 A1셀이 동일한 경우이고,
"이름이 반복된다"는 것은 처리 셀과 처리 셀의 위셀의 성명이 같다는 것입니다.
나. 작성된 매크로
개발 도구 - Visual Basic을 눌러 VB Editor를 연 후
삽입 - 모듈을 눌러 Module 1을 추가한 후
아래 코드를 붙여 넣습니다.
Option Explicit
Sub 고지서인쇄()
Dim sht1 As Worksheet, sht2 As Worksheet
Dim i As Long, endRow As Integer, n As Integer
Set sht1 = Sheets(1)
Set sht2 = Sheets(2)
endRow = sht2.Range("a" & Rows.Count).End(xlUp).Row
n = 11
For i = 7 To endRow
With sht2
'병합 셀이고, 이전 행과 이름이 같을 경우 같은 고지서로 인쇄
If .Range("A" & i).MergeCells = True And .Range("e" & i) = .Range("e" & (i - 1)) Then
With sht1
'사용료 내역 입력
Call inputEach(sht1, sht2, n, i)
'사용료를 핪산 한 금액으로표시
.Range("E27") = sht2.Range("P" & i).MergeArea.Range("a1") '사용료
End With
n = n + 1
Else
n = 11
With sht1
'기존 내역 삭제
.Range("B11:J21").ClearContents
'회사명(성명) 한번 표시
.Range("D6") = sht2.Range("E" & i) '회사명(성명)
'사용료 내역 입력
Call inputEach(sht1, sht2, n, i)
'납부금액 계 산식과 사용료 입력
.Range("E26") = "=sum(E27:E29)" '납부금액 계
.Range("E27") = sht2.Range("O" & i) '사용료
End With
n = n + 1
End If
'인쇄 조건
'병합 셀이 아닌 경우이거나
'병합 셀인 경우는 연번 셀이 0인 경우는 아래 셀과 성명이 달라야 하고,
'연번 셀이 0보다 크다면 윗 셀과 성명이 다를 경우
If (.Range("a" & i).MergeCells = False) Or _
(.Range("a" & i).MergeCells = True And _
(Range("a" & i) = 0 And .Range("E" & i) <> .Range("E" & (i + 1))) Or _
(Range("a" & i) > 0 And .Range("E" & i) <> .Range("E" & (i - 1))) _
) Then
ActiveSheet.PrintPreview
End If
End With
Next
End Sub
Sub inputEach(sht1, sht2, n, i)
'공통된 부분인 사용료 세부 내역 입력
With sht1
.Range("B" & n) = sht2.Range("G" & i) '시군
.Range("D" & n) = sht2.Range("H" & i) '읍면
.Range("E" & n) = sht2.Range("i" & i) '리동
.Range("F" & n) = sht2.Range("j" & i) '지번
.Range("G" & n) = sht2.Range("L" & i) '사용면적
.Range("H" & n) = sht2.Range("O" & i) '사용료
.Range("i" & n) = sht2.Range("M" & i) '사용용도
End With
End Sub
다. 실행
ActiveSheet.PrintOut을 ActiveSheet.PrintPreview로 바꾸고 실행하면
미리 보기 상태로 인쇄 화면이 열립니다.
인쇄 미리 보기 닫기 버튼을 눌러야 다음 페이지로 이동합니다.
![](https://blog.kakaocdn.net/dn/bF1MJX/btsFUG8wMfn/7T97mgZ8rNSssFB0w0aDd0/img.png)
다른 부분은 어려운 것이 아닌데, 강감찬인 경우 고지서에 내역이 2줄로 표시되는지 확인이 중요합니다.
제대로 인쇄됩니다. 사용료는 2건이고, 사용료 계가 2건의 합계인 170,570으로 잘 표시됩니다.
![](https://blog.kakaocdn.net/dn/TELX2/btsFW9uSxxs/KScz5p5enbA1D5VGk20kf0/img.png)
고지서__개별인쇄(주소연결 완성).xlsm
0.04MB
반응형