• 최초 작성일: 2000-10-13
  • 최종 수정일: 2026-09-30
  • 조회수: 11 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 파일 입출력에 관한 미셀러니

들어가기 전에

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

지난 시간에 기본적인 텍스트 파일 입/출력 방법들에 대해서는 설명을 드렸습니다. 이것들을 잘 응용하시면 어지간한 텍스트 파일 입/출력 작업은 일도 아닐 것입니다. 이번 시간에는 이러한 것들을 응용하여 Excel을 열고 닫을 때마다 작업 시간들이 기록되도록 하는 방법과 두 개의 텍스트 파일을 가지고 함께 작업하는 방법에 대해 알아보도록 하지요.

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

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

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


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

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

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

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

파일 입출력에 관한 미셀러니

핵심 요약: 로그 기록과 파일 복사

Append 모드로 로그를 덧붙이고, 두 파일을 동시에 열어 InStr로 조건에 맞는 줄만 다른 파일로 복사합니다.

  • 1단계: Workbook_Open과 BeforeClose 이벤트에서 Open For Append로 로그 파일을 엽니다.
  • 2단계: Print #으로 사용자와 시각을 기록하고 Close로 닫습니다.
  • 3단계: 두 파일을 열고 InStr로 조건에 맞는 줄만 Print #2로 내보냅니다.

Step 1: 파일을 열고 닫을 때마다 기록 남기기

아마 이 파일을 열었을 때 메시지 박스가 하나 나타나면서 "…ExcelLogInOut.txt…"라는 메시지가 나타났을 것입니다. 이것은 특정 파일을 열거나 종료할 때, 그 흔적을 별도의 텍스트 파일에 남겨둠으로써 사용자가 언제 파일을 열어보았는지 그리고 얼마동안 작업을 하였는지 등을 알 수 있게 됩니다.

코드는 엄청 간단합니다. 이 프로시저는 Workbook_Open과 BeforeClose 이벤트를 사용하므로 VB Editor 상태에서 프로젝트 탐색기에 보면 ThisWorkbook 오브젝트가 있는데 이것을 더블클릭하고 해당 이벤트를 선택한 다음 코드를 작성합니다.

Option Explicit
Dim strUserName As String
Dim strPath As String
'//프로시저를 실행하기 전에 외부 변수를 선언합니다. 이렇게 해 두면 다른 프로시저에서
'//별도의 선언없이도 함께 사용을 할 수 있습니다.

Private Sub Workbook_Open()
    Dim Msg As String
    strUserName = Application.UserName & "님의 "
    strPath = ThisWorkbook.Path & Application.PathSeparator

    Open strPath & "ExcelLogInOut.txt" For Append As #1
    '//다른 것은 특별한 것이 없는데 바로 이 부분에서 주의를 하셔야 합니다. 즉 Output 문장을
    '//사용하면 새로운 파일이 생성되므로 매번 로그인/아웃 기록을 파일 맨 밑에 덧붙이기 위해
    '//Append Statement를 사용했습니다.

    Print #1, strUserName & " LogIn Time: " & Now
    '//Print Statement에 대해서는 지난 시간에 설명을 드렸지요? 탭으로 구분된 파일을 생성할
    '//때, 사용합니다.

    Close #1
    Msg = strPath & "폴더에 " & vbCr
    Msg = Msg & "ExcelLogInOut.txt 파일이 생성되었습니다"
    MsgBox Msg, , "LogIn 파일 생성//Exceller"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    '//파일을 닫기 전에 기록을 남기기 위해 Workbook_BeforeClose 이벤트를 사용했습니다.
    '//코드는 Workbook_Open의 그것과 거의 같습니다.
    strUserName = Application.UserName & "님의 "
    strPath = ThisWorkbook.Path & Application.PathSeparator

    Open strPath & "ExcelLogInOut.txt" For Append As #1
    Print #1, strUserName & " LogOut Time: " & Now
    Close #1
End Sub

이렇게 하면 이 파일을 열 때 마다 LogIn 기록이 남게 됩니다. 이번에는 LogOut을 할 때마다 기록이 남도록 하기 위한 방법입니다. 마찬가지로 Event 프로시저를 사용합니다.

이해 하시겠지요?

여러분 PC에 OOO.Log 또는 OOLogOO.txt 등의 파일이 곳곳에 있을 것입니다. 이러한 파일들은 모두 위에서 설명드린 것과 비슷한 방법을 사용해서 사용자들의 작업내역을 기록해 둔 파일입니다. WinZip 압축 유틸리티를 사용하시는 분들은 C:\ 밑에 Winzip.log 파일을 워드패드 등으로 열어 보세요. 그동안의 작업내용들이 고스란히 기록되어 있는 것을 확인하실 수 있습니다.

사용자 이름과 작업 시각을 파일에 남기는 기능은 개인 정보 및 사내 보안 정책과 관련될 수 있으므로 사용 전에 대상자에게 알려야 합니다. 또한 Application.UserName은 엑셀 옵션에서 바꿀 수 있으므로 정확한 사용자 식별용으로는 적합하지 않을 수 있습니다.

Step 2: 특정 문자열이 있는 줄만 다른 파일로 복사하기

이번에는 또다른 것을 하나 해 보도록 하지요. 텍스트 파일 중에서 특정한 문자열을 포함하고 있는 라인만을 다른 파일로 복사하는 방법입니다. 버튼을 눌러 보세요.

아래 코드는 TextIn.txt 파일에서 "3월"이 포함된 줄만 MakeFile.txt 파일로 복사합니다(TextIn.txt는 월별 자료가 한 줄씩 들어 있는 텍스트 파일이며 강좌 파일과 같은 폴더에 둡니다).

Sub MakeAnotherFile()
    Dim strTemp As String
    Dim strData As String
    Dim Msg As String

    Open ThisWorkbook.Path & "\TextIn.txt" For Input As #1
    Open ThisWorkbook.Path & "\MakeFile.txt" For Output As #2
    strTemp = "3월"
    '//지금까지와는 달리 두 개의 파일을 오픈하였습니다. 하나는 Input 문으로, 다른 하나는
    '//Output 문으로 열었습니다.

    Do While Not EOF(1)
        Line Input #1, strData
        If InStr(1, strData, strTemp) Then Print #2, strData
        '//InStr() 함수는 VBA 함수로 특정 문자열 중에서 지정한 문자열이 처음으로 나타난 위치를
        '//알려주는 함수입니다. 따라서 3월 이라는 문자열이 포함된 레코드(라인)이면 #2 파일로
        '//내보냅니다. InStr()은 중요한 함수이므로 도움말을 참고하시기 바랍니다.

    Loop
    Close
    '//Close Statement 뒤에 #1, #2 등과 같은 file number list를 생략하면 Open문으로 연 모든
    '//파일들을 닫습니다.

    Msg = "MakeFile.txt 파일이 생성되었습니다" & vbCr
    Msg = Msg & "파일을 열어서 확인해 보세요"
    MsgBox Msg, , "파일 생성//Exceller"
End Sub

몇 줄 안되는 짧은 코드이지만 아주 유용한 것이니까 잘 익혀두시기 바랍니다.

마무리

다음 시간에…

정리 — 파일 입출력 활용 핵심

구분 사용한 코드 역할
덧붙이기 Open 경로 For Append As #1 파일 끝에 계속 추가
기록 Print #1, 텍스트 & Now 사용자와 시각 기록
열기·닫기 이벤트 Workbook_Open / Workbook_BeforeClose 자동 실행
문자열 검색 InStr(1, strData, strTemp) 특정 문자열 위치 확인
모두 닫기 Close 열린 모든 파일 닫기

자주 묻는 질문 (FAQ)

Q1. 파일을 열고 닫은 기록은 어떻게 남기나요?

Workbook_Open과 Workbook_BeforeClose 이벤트에서 Append 모드로 텍스트 파일을 열어 시각을 기록하면 됩니다.

Q2. Append 모드는 무엇인가요?

기존 파일 내용을 지우지 않고 맨 아래에 새 내용을 덧붙이는 파일 열기 방식입니다.

Q3. Close 문에 파일 번호를 생략하면 어떻게 되나요?

Open 문으로 연 모든 파일이 닫힙니다.

마치며

Append 모드와 InStr만 알아도 로그 기록과 조건 추출 같은 실무 자동화를 간단히 구현할 수 있습니다.