• 최초 작성일: 2000-10-10
  • 최종 수정일: 2026-09-30
  • 조회수: 20 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 파일을 열지않고 값 읽어오기

들어가기 전에

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

"명상(Meditation)"이라고 하면 여러분은 어떤 것이 떠오르십니까? 보통 명상 하면 수염이 허연 도사같은 사람들이 벽을 보고 앉은 채, 미동도 없이, 삼매경에 빠져있는 것을 떠올리게 될 것입니다. 그런데 진정한 의미의 명상은 몰입, 즉 어떤 한 가지 일에 심취하는 것이 아닌가 생각합니다.

여러분은 지금 어떤 것에 미쳐(죄송합니다 이런 과격한 표현을 써서 ^^) 계십니까? 어떤 일에 미친다는 것, 곧 (좋은 것에) 중독된다는 것이 바로 명상, 그 자체이고 마음의 평정을 얻는 가장 좋은 방법이라고 생각합니다. 부디 여러분들도 무언가 한 가지 것에 몰입해 보시기 바랍니다. 사무실에서 많은 시간을 보내는 분은 몸을 많이 쓰는 일에, 쓰는 일에, 육체를 많이 쓰는 분은 그 반대되는 것에 말입니다.

역설적으로 들리실 지 모르겠지만 Exceller는 달리기를 하는 도중에 명상에 잠기곤 합니다. 숨이 턱에까지 차서 당장 때려치고 싶은 순간, 이것을 Dead Point(사점)라고 하는데 이 고비를 잘 넘기면 다시 새로운 기운이 샘솟게 됩니다. 이 때를 Second Wind라고 하며, 이 단계에 들어가면 내가 뛰는 것인지, 아니면 그저 주위의 풍경들이 다가왔다가 다시 뒤로 밀려나고 나는 그저 팔만 앞뒤로 흔드는 것인지 헷갈리게 됩니다. 또한 이 상태가 되면 여러 가지 좋은 생각들이 주마등처럼 스쳐 지나갑니다. 좋은 아이디어는 몸을 많이 움직이면 움직일수록 솟아납니다.

사설은 이쯤에서 접겠습니다. 더 나가면 곁길로 새니까(이미 반 정도는 샌 듯… ^^;).

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

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

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


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

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

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

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

파일을 열지않고 값 읽어오기

핵심 요약: 닫힌 파일 값 읽기

경로와 파일명, 시트명, R1C1 주소를 조합한 문자열을 ExecuteExcel4Macro로 실행해 열지 않은 통합 문서의 값을 읽어옵니다.

  • 1단계: 읽을 파일의 경로, 파일명, 시트명을 변수에 담습니다.
  • 2단계: 사용자 정의 함수 ReadValue에서 참조 문자열을 만듭니다.
  • 3단계: ExecuteExcel4Macro로 실행해 값을 받아 셀에 채웁니다.

Step 1: 닫혀있는 파일의 값 읽어오기

강좌 제목이 아주 흥미롭군요(자기가 지어 놓고 흥미롭다니… 웬 나르시시즘?!@#). 오늘은 또 Exceller가 어떤 신통한(?) 것을 보여 드리려고 하나… 궁금하시지요? 하긴 어떤 분은 Exceller가 독심술을 배웠느냐고 질문하시는 분도 있었답니다.

"파일을 열지않은 상태에서 값을 읽어오는 방법이 없을까요?"라고 질문을 하시는 분이 가끔 계십니다. 이번 강좌에서 사용되는 파일은 지금 보시는 이 강좌 파일과 "지점별실적.xls" 파일입니다. 이 두 개의 파일을 반드시 같은 폴더에 압축해제를 하신 다음 아래 버튼을 눌러 보시기 바랍니다.

이 강좌에서 읽어올 지점별실적.xls 파일의 Sheet1은 아래와 같은 형태입니다.

지점명1월2월3월1분기계
강동439637176
강서617872211
강남666376205
강북165796169
부산40587105
대구173064111
대전758157213
광주45676118
제주776553195
지점계4405954681503

Step 2: XLM 매크로란?

VBA로는 닫혀있는 파일의 값을 읽어오는 방법이 없습니다만 XLM 매크로를 사용하면 이것이 가능합니다(실제로는 "파일연결하기" 기능을 사용한 것입니다). XLM 매크로에 대해 간략하게 설명을 드리자면, 초기의 Excel(Excel 95이전까지)에서 매크로는 XLM이라는 확장자명을 갖는 별도의 파일에 코드를 따로 저장했었습니다. 이것을 XLM 매크로 또는 Excel4Macro라고도 불렀습니다.

XLM 매크로는 배우기가 엄청나게 어렵고 함수의 종류도 많았다고 합니다. (Exceller도 직접 사용해 보지는 않았고 오늘 강좌처럼 필요한 부분만 그때그때 참고를 하곤 합니다)

Excel 5.0 버전이 되면서부터 VBA 엔진을 장착하게 되었는데 VBA는 XLM보다 훨씬 배우기가 쉽고 막강한 성능을 자랑합니다. Excel에 VBA 엔진을 탑재할 것이냐 말것이냐를 두고 Microsoft社 내부에서도 의견이 분분했다고 전해집니다만 VBA를 Excel에 장착하면서부터 Excel은 그야말로 날개를 달게되었지요(그래서 본 강좌의 제목도 "Excel에 날개달기"랍니다 ^^).

하여튼 XLM 매크로는 앞으로 VBA가 버전업 됨에 따라 점점 자취를 감출 것으로 예상됩니다. 코드를 보도록 하지요.

ExecuteExcel4Macro는 옛 XLM(Excel 4.0) 매크로 함수를 실행하는 메서드로, 지금도 동작합니다. 다만 XLM 매크로는 보안 정책상 제한되는 경우가 있고, 최근에는 닫힌 통합 문서의 값을 읽을 때 외부 참조 수식, Power Query, ADO(ActiveX Data Objects) 등을 사용하는 방법도 많이 쓰입니다.

Step 3: 값을 불러오는 프로시저 작성하기

Sub CallReadValue()
    Dim strPath As String
    Dim strFile As String
    Dim strSheet As String
    Dim strAddress As String
    Dim sht As Worksheet
    Dim r As Long
    Dim c As Integer
    '//언제나처럼 필요한 변수를 먼저 선언해 줍니다.

    Application.ScreenUpdating = True
    Set sht = Worksheets.Add
    ActiveWindow.DisplayGridlines = False
    strPath = ThisWorkbook.Path
    strFile = "지점별실적.xls"
    strSheet = "Sheet1"
    '//ScreenUpdating은 작업중 화면 갱신여부를 지정하는 것입니다.
    '//strPath 변수에는 현재 파일이 위치한 경로를, strFile은 불러올 파일 이름을, strSheet는
    '//불러올 파일의 대상 시트 이름을 각각 담아 둡니다.

    For r = 1 To 11
        For c = 1 To 5
            strAddress = Cells(r, c).Address
            If ReadValue(strPath, strFile, strSheet, strAddress) = 0 Then Exit For
            Cells(r, c) = ReadValue(strPath, strFile, strSheet, strAddress)
            '//순환문을 돌면서 불러올 자료가 있는 셀의 위치를 저장합니다. 여기서 ReadValue가
            '//바로 XLM 매크로를 사용한 사용자 정의 함수입니다.
            '//이 함수는 경로명, 파일이름, 시트이름, 셀주소 이렇게 4개의 요소를 넘겨 받습니다.
        Next c
    Next r

    Selection.AutoFormat Format:=xlRangeAutoFormatList1, Number:=True, Font:= _
        True, Alignment:=True, Border:=True, Pattern:=True, Width:=True
    Rows("1:2").Insert shift:=xlDown
    '//이 부분은 "자동 서식"을 설정하는 것입니다. 그러면 Exceller 당신은 이걸 다 외워서
    '//적었느냐? 절대 그렇지 않겠지요? 자동 서식 설정을 하는 과정을 매크로 기록기를 통해
    '//기록한 다음, 수정/복사해서 붙여넣기를 하면 됩니다.

    With ActiveCell
        ActiveSheet.Buttons.Add(.Left, .Top, .Width * 2, .Height).Select
        With Selection
            .Caption = "<<돌아가기"
            .OnAction = "GoBack"
        End With
    End With
    '//자료 불러오기가 끝난 다음에 원래 위치로 돌아가기 위한 과정으로, 버튼을 하나 만들고
    '//여기에 GoBack이라는 프로시저를 지정합니다.

    Range("a1").Select
    MsgBox "자료를 모두 읽어들였습니다", vbInformation, "작업 종료//Exceller"
End Sub

버튼에 연결된 GoBack 프로시저는 원래의 강좌 시트로 돌아가는 역할을 합니다.

Sub GoBack()
    Sheets("Preface").Select
End Sub

Step 4: XLM 매크로를 이용한 사용자 정의 함수

이제 XLM 매크로를 사용해서 닫힌 파일의 내용을 불러오는 사용자 정의 함수를 작성합니다. 이 부분이 오늘의 핵심입니다.

Function ReadValue(Path, File, sht, Rng) As Variant
'//이 함수는 경로명, 파일명, 시트명, 범위명(셀주소) 이렇게 4가지 요소를 받습니다.

    Dim Msg As String
    Dim strTemp As String

    If Trim(Right(Path, 1)) <> "\" Then Path = Path & "\"
    '//지정한 경로명 마지막 부분에 \ 표시가 없으면 \표시를 추가합니다.

    If Dir(Path & File) = "" Then
        ReadValue = "해당 파일이 없습니다"
        Exit Function
        '//지정한 경로명내에 파일이 없으면 "해당 파일이 없습니다"라는 문자열을 결과값으로
        '//돌려주고 함수를 종료합니다.

    End If
    Msg = "'" & Path & "[" & File & "]" & sht & "'!" & Range(Rng).Range("a1") _
         .Address(, , xlR1C1)
    ReadValue = ExecuteExcel4Macro(Msg)
    '//다른 파일이나 워크시트의 내용을 연결할 때, 파일의 경우에는 '를, 워크시트의 경우에는
    '//!표시가 붙습니다. 이것에 착안하여 Msg라는 문자열 변수에 경로명 & 파일명 & 셀주소 등의
    '//정보를 저장합니다.

    '//그런 다음에 Excel4Macro(XLM의 다른 이름!)를 실행시키고 결과값을 넘겨 받습니다.

End Function

마무리

오늘은 여기까지…

정리 — 닫힌 파일 값 읽기 핵심

구분 사용한 코드 역할
파일 확인 Dir(Path & File) = "" 파일 존재 여부 확인
참조 문자열 "'" & Path & "[" & File & "]" & sht & "'!" & 주소 외부 참조 형식 만들기
주소 형식 .Address(, , xlR1C1) R1C1 형식 주소
값 읽기 ExecuteExcel4Macro(Msg) XLM 매크로로 값 가져오기
돌아가기 버튼 .OnAction = "GoBack" 원래 시트로 이동

자주 묻는 질문 (FAQ)

Q1. VBA로 닫혀있는 파일의 값을 읽을 수 있나요?

VBA만으로는 어렵지만 XLM 매크로인 ExecuteExcel4Macro를 사용하면 파일을 열지 않고 값을 읽을 수 있습니다.

Q2. XLM 매크로는 무엇인가요?

Excel 95 이전에 사용하던 매크로 방식으로, Excel4Macro라고도 부릅니다.

Q3. 참조 문자열은 어떤 형식인가요?

'경로[파일명]시트명'!R1C1 형식으로 만듭니다.

마치며

XLM 매크로를 활용하면 파일을 열지 않고도 다른 통합 문서의 값을 읽어올 수 있습니다.