• 최초 작성일: 2013-04-18
  • 최종 수정일: 2026-09-30
  • 조회수: 59 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: VBA 파워 코딩 231회 - 영역을 html 파일로

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

이번 시간에는 사용자가 지정한 영역을 html 파일로 내보내기(Exporting) 하는 방법에 대해 살펴보겠습니다. 선택한 영역을 html 파일로 만들고자 할 때, 일반적으로 다음과 같은 두 가지 방법이 많이 사용됩니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

지정한 영역을 html 파일로 저장하기

핵심 요약: 영역을 html 파일로 내보내는 두 가지 방법

워크시트 영역을 html 파일로 저장하는 방법에는 '다른 이름으로 저장' 대화상자를 이용하는 방법과, ExportToHtml 프로시저로 직접 태그를 생성하는 방법이 있습니다. 후자는 파일 크기를 크게 줄일 수 있습니다.

  • 방법 1: Office 단추 - 다른 이름으로 저장 - 웹 페이지 - 선택 영역 게시
  • 방법 2: ExportToHtml 프로시저로 InputBox/GetSaveAsFilename 활용해 자동화
  • 장점 비교: 방법 2가 파일 크기를 약 1/4 수준으로 줄일 수 있음
  • 단점: 방법 2는 굵게·이탤릭·수평 정렬 외의 서식은 지원하지 않음

방법 1: '다른 이름으로 저장' 명령 이용하기

(1) 내보내기 할 영역을 선택하고 'Office 단추 - 다른 이름으로 저장 - 다른 형식'을 선택합니다.

(2) '다른 이름으로 저장' 대화상자에서 '파일 형식 - 웹 페이지'로 지정합니다. '선택 영역' 항목을 클릭한 다음 '게시' 버튼을 클릭합니다.

'다른 이름으로 저장' 대화상자에서 파일 형식을 웹 페이지로 지정하고 선택 영역의 게시 버튼을 누르는 화면
아이엑셀러

(3) '웹 페이지로 게시' 대화상자가 나타납니다. 이상 여부를 확인한 다음 '게시' 버튼을 클릭하면 지정한 위치에 html 파일이 만들어집니다.

웹 페이지로 게시 대화상자에서 게시할 항목과 파일 이름을 확인한 뒤 게시 버튼을 누르는 화면
아이엑셀러

방법 2: VBA를 이용하는 방법

매번 대화상자를 여러 번 거쳐야 하는 번거로움을 덜기 위해 VBA를 이용하여 자동화할 수도 있습니다. 표준 모듈에 다음 코드를 입력합니다.

Sub ExportToHtml()

    Dim strHtmlFileName As String
    Dim strAddress As String
    Dim strOpenTag As String
    Dim strCloseTag As String
    Dim strCell As String
    Dim strMsg As String
    Dim rngRange As Range
    Dim lngRow As Long
    Dim lngCol As Long

    Application.Goto Worksheets("Workplace").Range("A1"), True

    strAddress = Range("B3").CurrentRegion.Address
    Set rngRange = Application.InputBox("대상영역을 선택하세요.", _
        Default:=strAddress, Type:=8)
    ' Workplace 시트의 B3 셀 주변 영역을 rngRange 변수에 할당합니다.
    ' 물론 InputBox 함수를 이용하여 다른 영역을 지정할 수도 있습니다.

    If rngRange Is Nothing Then
        MsgBox "대상 영역을 다시 확인하세요!", vbCritical
        Exit Sub
    End If

    Do
        strHtmlFileName = Application.GetSaveAsFilename(Format(Int(Now), "yyyymmdd"), _
            fileFilter:="Html Files (*.htm), *.htm")
        ' 파일을 저장할 위치를 지정합니다. GetSaveAsFilename 메서드를 이용하면
        ' '다른 이름으로 저장' 대화상자가 나타나므로 사용자가 편리하게 폴더 위치와
        ' 파일 이름을 지정할 수 있습니다.
    Loop Until strHtmlFileName <> ""

    Open strHtmlFileName For Output As #1
    ' Open 문은 파일을 가져오거나(Importing) 내보내기(Exporting) 하기 전에
    ' 반드시 적어주어야 합니다.

    Print #1, "<HTML>"
    Print #1, "<TABLE BORDER=1 CELLPADDING=1>"

    For lngRow = 1 To rngRange.Rows.Count
        Print #1, "<TR>"

        For lngCol = 1 To rngRange.Columns.Count
            Select Case rngRange.Cells(lngRow, lngCol).HorizontalAlignment
                Case xlHAlignLeft
                    strOpenTag = "<TD ALIGN=LEFT>"
                Case xlHAlignCenter
                    strOpenTag = "<TD ALIGN=CENTER>"
                Case xlHAlignGeneral
                    If IsNumeric(rngRange.Cells(lngRow, lngCol)) Then
                        strOpenTag = "<TD ALIGN=RIGHT>"
                    Else
                        strOpenTag = "<TD ALIGN=LEFT>"
                    End If
                Case xlHAlignRight
                    strOpenTag = "<TD ALIGN=RIGHT>"
            End Select

            strCloseTag = "</TD>"

            If rngRange.Cells(lngRow, lngCol).Font.Bold Then
                strOpenTag = strOpenTag & "<B>"
                strCloseTag = "</B>" & strCloseTag
            End If

            strCell = rngRange.Cells(lngRow, lngCol).Text
            Print #1, strOpenTag & strCell & strCloseTag
        Next lngCol

        Print #1, "</TR>"

    Next lngRow

    Print #1, "</TABLE>"
    Print #1, "</HTML>"

    Close #1

    strMsg = "HTML 파일로 내보내기 작업이 완료되었습니다." & vbCr
    strMsg = strMsg & strHtmlFileName & "파일을 열어보세요!"
    MsgBox strMsg, , "아이엑셀러 닷컴"

End Sub

코드 설명

Application.InputBox(Type:=8)로 내보낼 영역을 선택받고, Application.GetSaveAsFilename으로 저장할 파일 이름과 위치를 지정받습니다. Open ~ For Output과 Print # 문으로 셀을 하나씩 순회하면서 정렬 방식과 굵게 서식에 맞는 <TD> 태그를 직접 만들어 html 파일에 써 나갑니다.

두 방법의 장단점 비교

이 ExportToHtml 프로시저를 이용하면 좋은 점은, 불필요한 서식을 지정하지 않으므로 파일 크기를 크게 줄일 수 있다는 것입니다. 예를 들어 Workplace 시트의 A1:F22 영역을 내보낼 때, (방법 1)을 사용하면 20.1KB 정도의 크기가 됩니다만, ExportToHtml 프로시저로 내보낸 경우에는 5.19KB밖에 되지 않습니다(약 1/4 수준, Exceller PC 기준).

반면, ExportToHtml 프로시저는 워크시트 상에서 표현되는 모든 셀 서식을 유지하지는 못합니다. 지정할 수 있는 서식은 굵게, 이탤릭, 수평 정렬 정도가 전부입니다.

그런 의미에서… 세상은 공평합니다(물론 '평등'하지는 않지만요!). 음지가 있어 양지가 드러나듯 장점을 다르게 바라보면 단점이 될 수 있으니까요… 이 세상에 '만병통치약(cure-all)'은 없습니다.

정리 — 영역을 html로 저장하는 두 가지 방법 비교

구분 방법 1(다른 이름으로 저장) 방법 2(ExportToHtml)
조작 방식 대화상자를 여러 번 거쳐야 함 버튼 한 번으로 자동화
파일 크기(예시) 약 20.1KB 약 5.19KB
지원 서식 워크시트 서식 대부분 유지 굵게·이탤릭·수평 정렬만 지원

자주 묻는 질문 (FAQ)

Q1. InputBox에서 '취소'를 누르면 어떻게 되나요?

rngRange 변수가 Nothing이 되므로, If rngRange Is Nothing Then 조건에 걸려 안내 메시지를 표시하고 프로시저가 안전하게 종료됩니다.

Q2. 테두리나 배경색 같은 서식도 html에 반영되나요?

아니요. ExportToHtml 프로시저는 수평 정렬(왼쪽/가운데/오른쪽)과 굵게 서식만 , 태그로 변환합니다. 그 외의 서식(테두리, 배경색, 글꼴 색 등)은 반영되지 않습니다.

Q3. 왜 파일 크기 차이가 이렇게 크게 나나요?

'다른 이름으로 저장 - 웹 페이지' 기능은 엑셀 화면을 최대한 그대로 재현하기 위해 다양한 스타일 정보를 함께 저장하는 반면, ExportToHtml은 꼭 필요한 최소한의 태그만 생성하기 때문입니다.

마치며

기본 기능과 VBA, 어느 쪽이 정답이라기보다는 상황에 맞게 골라 쓰면 됩니다. 서식을 최대한 살리고 싶다면 방법 1을, 가볍고 빠른 결과물이 필요하다면 방법 2를 선택해 보세요!