오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
해결 엑셀2016윈도우10

VBA를 활용한 일괄 인쇄 명령

미르
7월 28일 조회 1,522
학생 번호를 바꾸면 해당 학생의 선택과목에 대한 통계 정보를 반환하는 시트를 제작하였습니다.

마지막으로 VBA를 활용해 학생 번호를 바꾸면서 일일이 인쇄버튼을 누르지 않아도 모든 학급 내 학생들의 데이터가 인쇄되도록 하려고 합니다.

VBA를 찾아보며 적용해봤으나 오히려 더 꼬이기만 하는 것 같아 엑셀 고수님들의 도움을 요청합니다!

 

"개인별 교육과정 시트" 내 G2셀에 1번부터 30번까지 입력한 결과를 자동 인쇄해주는 VBA를 어떻게 써야 할까요?

댓글 2

원조백수 채택된 답변 7월 29일
대충 아래와 같이 매크로 정리했습니다.
출력하시기 전에 미리보기로 페이지 설정이 제대로 되어 있는지 확인하고 실행하세요.
Sub PrintClassData()
    Dim sh As Worksheet, shName As Worksheet, rName As Range, vName As Variant, i As Long
    Dim iY As Long, iC As Long, iCnt As Long
    '// 사용할 시트 지정
    Set sh = ActiveSheet
    Set shName = Worksheets("명렬표")
    '// 학년, 학급 확인
    If Not IsNumeric(sh.Range("C2").Value2) Then Exit Sub
    If Not IsNumeric(sh.Range("E2").Value2) Then Exit Sub
    iY = CLng(sh.Range("C2").Value2)
    iC = CLng(sh.Range("E2").Value2)
    
    '// 학년별 명렬표 학번지정
    Select Case CLng(sh.Range("C2").Value2)
    Case 1: Set rName = Intersect(shName.Range("B:B"), shName.UsedRange)
    Case 2: Set rName = Intersect(shName.Range("F:F"), shName.UsedRange)
    Case 3
    Case Else
    End Select
    If rName Is Nothing Then Exit Sub
    
    '// 학번을 배열로 만들어 진행
    vName = rName.Value2
    For i = 1 To UBound(vName, 1)
        If vName(i, 1) Like iY & Format(iC, "00") & "*" Then
            iCnt = iCnt + 1
            sh.Range("G2") = Right(vName(i, 1), 2) * 1
            sh.Calculate
            sh.PrintOut
        End If
    Next i
    
    '// 결과 확인
    If iCnt = 0 Then
        MsgBox "해당 학급이 명렬표에 없습니다."
    Else
        MsgBox iCnt & "명의 출력이 완료되었습니다."
    End If
End Sub

 
미르 작성자 7월 29일
@원조백수 님 간단하게 작성될 줄 알았는데 이렇게나 상세히 작성해주셔서 감사드립니다. 잘 연구해보겠습니다.

질문답변 게시판의 최근 글

스크랩 완료