• 최초 작성일: 2001-01-05
  • 최종 수정일: 2026-09-30
  • 조회수: 7 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 자료변환 예제

들어가기 전에

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

//메일 하나

새해 인사가 좀 늦었죠?
님의 엑셀강좌를 열심히 듣고 있습니다.
요즘 들어 VBA강좌는 너무 어려워서 고생하고 있습니다.
좀 짧은 코딩과 기초를 가끔씩 짚어 주시면 좋겠습니다.

VBA를 좀더 쉽게 체계적으로 예습을 하려면 뭐부터 해야하는지
알려 주셨으면 더 좋겠습니다.

참, "오랫동안 꿈을 그리는 사람은 마침내 그 꿈을 닮아간다!"라는
명언은 프랑스의 소설가 앙드레 말로의 말인거 같은데…
저도 참 좋아하는 말인데, 님도 좋아하시나 보군요.
전 근데 꿈만 많은 것 같습니다.

건강하시기 바랍니다.

지난 시간에 "오랫동안 꿈을 그리는 사람은 …"이라는 문구를 소개해 드리면서 "나다니엘 호도도온"이 한 말이라고 했더니… 출전이 잘못되었나 봅니다. 방방곡곡에서 모니터링을 해 주는 분이 많아서 이제 맘대로 거짓말(?)도 못하게 되었습니다. ^^;

이 분의 메일을 요약하면, (1) 강좌를 좀더 쉽게 해달라는 것과 (2) VBA를 좀더 체계적으로 공부하려면 어떻게 해야하느냐 하는 것이라고 할 수 있겠습니다.

첫번째 사항에 대해서는 적극 반영하도록 하겠습니다. 요즘은 Q&A란에 올라오는 질문들과 Exceller의 개인 메일로 오는 질문들을 합치면 하루 평균 20건 정도 됩니다(개인 메일로 질문을 하시는 경우, 사정상 답변 우선순위에서 뒤로 밀립니다. ^^).

그런데 질문을 하시는 분들이 어떤 부분이 이해가 안되는지, 어디에서 추가설명을 요하는지 등에 대해 언급이 없으시면 '아, 설명을 기가막히게 잘 했나보군!' Exceller는 이렇게 생각하고 혼자 흐뭇해하며 계속 진도를 나가게 되지요. ^^;

그리고 두번째 사항… VBA를 배우는 데에는 여러 방법이 있겠습니다만 EXCEL에는 "매크로 기록기" 와 "도움말"이라고 하는 걸출한 학습 도구가 있습니다. 이 두 가지 Tool을 항상 활용하시기 바랍니다. 거기다가 Exceller's Home을 내집 드나들듯이 넘나들면서 강좌들을 하나씩 깨나가시면 머지않은 장래에 Specialist가 되시리라고 믿습니다.

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

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

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


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

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

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

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

자료변환 예제

핵심 요약: 텍스트 자료를 표로

세 줄 주기의 규칙을 찾아 Mod 3 = 2인 줄만 읽고 여섯 필드마다 행을 바꿔 표로 변환합니다.

  • 1단계: Open ... For Input으로 텍스트 파일을 엽니다.
  • 2단계: Line Input #으로 한 줄씩 읽고 i Mod 3 = 2인 줄만 사용합니다.
  • 3단계: 여섯 필드가 채워지면 다음 행으로 넘어가 표를 완성합니다.

Step 1: 오늘의 질문

오늘 소개해 드릴 내용은 오피스 튜터 사이트에 어느 분이 질문하신 것입니다.

안녕하십니까.

1500명 정도의 회원명단이 텍스트 자료로 있습니다.
회원명단을 효율적으로 관리하고자 하는데 일일이 수작업하기가 너무 힘듭니다.
다음과 같은 경우 어떻게 해야 하는지 알려주시면 감사하겠습니다.

현재 상태는 아래와 같이 항목 이름과 값이 세로로 한 줄씩 번갈아 입력되어 있는 텍스트 파일입니다.

[현 상태]
이름
김도석
나이
37세
직업
의사
회원번호
11111
주소
강원도 평창군
전화번호
123-4567
이름
김돌석
나이
38세
직업
자영업
회원번호
22222
주소
서울시 관악구
전화번호
234-5678
…………
…………
이런 식으로 자료가 입력되어 있습니다.
매번 이름, 나이, 직업, 회원번호, 주소, 전화번호가 다 들어가 있고
또한 각각 중간에 엔터가 하나씩 들어가 있습니다.

원하는 상태는 다음과 같습니다.

이름나이직업회원번호주소전화번호
김도석37세의사11111강원도 평창군123-4567
김돌석38세자영업22222서울시 관악구234-5678

Step 2: 실행해 보기

일단 아래 버튼을 눌러 예제를 실행시켜보고 오시기 바랍니다.

오늘 강좌 파일은 VB0084.xls와 MyList.txt 이렇게 두 개의 파일로 이루어져 있습니다. 압축을 푸실 때 반드시 같은 폴더에 푸시기 바랍니다. 안그러면 에러가 납니다.

Step 3: DataFormatTransfer 프로시저

일단 오늘 강좌를 제대로 이해하시기 위해서는 텍스트 파일 Importing에 대한 기본지식이 있어야 합니다. VB0052 강좌에서 자세하게 설명을 드렸으니 기억이 감감한 분들은 다시 한번 읽어보고 오시기 바랍니다. 세상 만사가 반복의 연속이지요? 역사도 반복되는데(History repeats itself) 무엇인들 반복이 안될려구… ^^ 코드를 볼까요?

Sub DataFormatTransfer()
    Dim strData As String
    Dim rngButton As Range
    Dim rngImport As Range
    Dim Msg As String
    Dim r As Long
    Dim c As Integer
    Dim i As Long
    Application.DisplayAlerts = False
    On Error GoTo ET
    '//필요한 등장인물 및 배역(변수)을 선언해 줍니다.
    '//만약 프로그램을 실행하는 도중 에러가 발생할 경우를 대비하여 안전장치(에러 트래핑)를
    '//마련해 둡니다.

    Worksheets.Add after:=Sheets("PREFACE")
    Set rngImport = ActiveSheet.Range("A1")
    ActiveWindow.DisplayGridlines = False
    '//새로운 워크시트를 한장 삽입하고 A1셀을 rngImport라고 지정해 둡니다.
    '//DisplayGridlines를 False로 지정하면 시트의 셀 구분선을 보이지 않도록 설정합니다.

    Range("A1:F1") = Array("이름", "나이", "직업", "회원번호", "주소", "전화번호")
    Open ThisWorkbook.Path & Application.PathSeparator & "MyList.txt" For Input As #1
    '//Open이라는 Statement에 대해서는 이미 VB0052 강좌에서 보셨지요? 안 보셨어요?
    '//이것은 (텍스트) 파일을 읽거나 쓰기 전에 반드시 써 주어야 합니다.
    '//그 다음에 Application.PathSeparator는 \와 같은 것이고, 그 뒤에 있는 Input은
    '//파일을 읽어올 때(즉 Importing 할 때), Output은 파일을 Exporting 즉 내보낼 때
    '//적어 줍니다.
    '//맨 마지막에 있는 #1은 읽어들일 파일의 filenumber로 1부터 511까지 가능합니다.

    Do While Not EOF(1)
        Line Input #1, strData
        '//파일을 읽어들일 때에는 Input, Input #, Line Input #, 이렇게 세 가지 Statement 중에서
        '//한 가지가 사용된다고 설명을 드렸지요?(아직 VB0052를 안 보신 분은 참고하세요)

        i = i + 1
        If i Mod 3 = 2 Then
        '//여기서부터는 약간 생각이 필요한 부분입니다.
        '//원본 데이터(텍스트 파일)을 잘 살펴보시면 어떤 규칙을 발견하실 수 있을 것입니다.
        '//어떤 규칙이 있습니까? 아무 규칙이 없다구요? 있습니다! 다시 한번 잘 살펴 보세요.

        '//그렇습니다!! 두 줄씩 내용이 있고 공백이 하나, 또 두 줄에 내용에 공백라인이 하나…
        '//이렇게 계속 반복이 되지요? 그리고 또 한 가지... 이름, 나이, 직업, 회원번호, 주소,
        '//전화번호 등과 같이 여섯 개의 필드가 계속 반복이 됩니다.

        '//따라서 이 두 가지 조건을 If 문을 사용해서 구분해 줍니다. 이렇게 말로 한 것을
        '//컴퓨터(EXCEL)가 알아먹을 수 있도록 프로그래밍을 하면 아래와 같이 됩니다.

            rngImport.Offset(r + 1, c) = strData
            c = c + 1
            If c = 6 Then
                c = 0
                r = r + 1
            End If

        End If
    Loop
    Close #1

    '//아래 부분은 완성된 자료에 대해 장식을 하는 부분입니다.
    Range("A2").Select
    Selection.AutoFormat Format:=xlRangeAutoFormatList2, Number:=True, Font:= _
        True, Alignment:=True, Border:=True, Pattern:=True, Width:=True
    Columns.AutoFit

    '//사용자의 편의를 위해 버튼을 하나 그린 다음, 클릭을 하게 되면 원래의 위치로
    '//돌아가도록 하기 위한 부분입니다.
    Rows("1:2").Insert Shift:=xlDown
    Set rngButton = ActiveSheet.Range("F2")
    With rngButton
        ActiveSheet.Buttons.Add(.Left, .Top, .Width, .Height).Select
    End With
    With Selection
        .Caption = "<<돌아가기"
        .Font.Size = 10
        .Font.Name = "Arial"
        .OnAction = "GoBack"
    End With
    rngButton.Select
    Msg = "자료를 다 읽어들였습니다" & vbCr & vbCr
    Msg = Msg & "총 " & r & "개의 레코드가 생성되었습니다"
    MsgBox Msg, , "작업 종료//Exceller"
    Application.DisplayAlerts = True
    Exit Sub
ET:
    '//만약 프로그램을 실행하는 도중 에러가 발생하면 이 부분이 실행됩니다.

    Msg = "파일이 존재하지 않거나 다른 경로에 있습니다." & vbCr
    Msg = Msg & "          확인하시기 바랍니다"
    MsgBox Msg, , "오류 발생//Exceller"
    Application.DisplayAlerts = True
End Sub

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

코드는 좀 길어보입니다만 이미 설명을 드렸던 부분이고 또한 decoration을 위한 부분이 일부 포함되어 있으므로 실제로 복잡한 것은 아닙니다.

마무리

오늘은 여기까지…

정리 — 자료 변환 핵심

구분 사용한 코드 역할
파일 열기 Open ... For Input As #1 텍스트 파일 읽기
끝 확인 Do While Not EOF(1) 파일 끝까지 반복
한 줄 읽기 Line Input #1, strData 한 줄씩 변수에 저장
규칙 판별 If i Mod 3 = 2 Then 값이 있는 줄만 선택
행 바꿈 If c = 6 Then c = 0: r = r + 1 다음 레코드로 이동

자주 묻는 질문 (FAQ)

Q1. 줄 단위로 나뉜 텍스트 파일을 표로 바꾸려면?

Line Input #으로 한 줄씩 읽으면서 데이터가 반복되는 규칙을 찾아 If 문으로 필요한 줄만 셀에 채우면 됩니다.

Q2. Open 문에서 Input과 Output의 차이는?

Input은 파일을 읽어 올 때, Output은 파일로 내보낼 때 사용합니다.

Q3. 파일 번호는 몇까지 사용할 수 있나요?

1부터 511까지 사용할 수 있습니다.

마치며

데이터가 반복되는 규칙만 찾으면 어떤 형태의 텍스트 자료도 표로 변환할 수 있습니다.