[엑셀/VBA] 텍스트 파일을 읽는 방법

엑셀 가지고 별걸 다 하다보니 이제 텍스트 파일을 읽어 그 내용을 라인별로 가져오는 작업도 해보게 되었습니다.

방법론

VBA 에서 텍스트 파일 읽기는 아래와 같이 생각보다 간단합니다.

  1. VBA 에서 파일을 연다.
  2. 파일의 각 라인을 Do ~ Loop 구문을 이용해 읽는다.
  3. (필요하다면) 읽어 들인 라인을 배열로 전환해 필요한 정보를 취득한다.

예제

일단 단순하게 표현된 전체 코드를 한번 볼까요?

Public Sub cmdLoad_Click()

    Dim FilePath as String
    Dim Arr as Variant

    FilePath = Application.GetOpenFilename(filefilter:="TXT, *.txt")

    Open FilePath For Input As #1
        
        Line Input #1, textline
        
        Do Until EOF(1)
        
            Arr = Split(textline, vbTab)
            
            (본인이 원하는 작업 실행)
            
        Loop

    Close #1

End Sub

좀 길어 보이는데 한 줄씩 읽어봅시다.

설명

변수 선언

    Dim FilePath as String
    Dim Arr as Variant

일단 필요한 변수를 선언해야겠죠? 읽어들일 파일의 경로를 담을 FilePath 와 결과물을 배열로 담을 Arr 이라는 변수를 선언을 해줍니다.

파일 경로 획득

    FilePath = Application.GetOpenFilename(filefilter:="TXT, *.txt")

다이얼로그를 이용해 읽어 들일 파일 경로를 선택해 FilePath 에 담아줍니다. 참고로 우리는 텍스트 파일이 그 대상이니 확장자를 txt 로 설정합니다.

파일 열기

    Open FilePath For Input As #1

        (...)

    Close #1

이제 실제로 파일을 읽어올 차례입니다. FilePath 에 저장된 파일의 경로를 읽어 오는데(Input), 그 파일을 1번으로 설정하는 것입니다. 작업이 끝나면 당연히 파일을 닫아(Close) 주어야 합니다.

파일 내용의 라인 불러오기

    Line Input #1, textline

1번 파일을 각 라인으로 불러오고 그 라인을 textline 이라고 지정합니다. 여기서 textline 이라는 이름은 원하는대로 설정할 수 있습니다.

각 라인 별로 원하는 작업 수행

    Do Until EOF(1)
    
        Arr = Split(textline, vbTab)
            
        (본인이 원하는 작업 실행)
    
    Loop

이제 Do ~ Loop 구문을 이용해 파일의 각 라인을 불러와 Arr 이라는 배열 변수에 담습니다. 해당 라인의 각 데이터가 탭기호로 구분되어 있다면 Split 함수와 vbTab 을 이용해 적절하게 변수에 배열로 담아 활용하면 됩니다. 만약 구분기호가 탭이 아니라면(예를 들어 쉼표) 해당 인수에 다른 값을 넣으면 됩니다.

이 작업은 1번 파일이 끝날때까지 = EOF(1) 계속 반복 되며, 각 라인별로 사용자가 원하는 작업을 할 수 있습니다.

생각보다 쉽죠?

끝.