[엑셀/VBA] 텍스트 파일을 읽는 방법
엑셀 가지고 별걸 다 하다보니 이제 텍스트 파일을 읽어 그 내용을 라인별로 가져오는 작업도 해보게 되었습니다.
방법론
VBA 에서 텍스트 파일 읽기는 아래와 같이 생각보다 간단합니다.
- VBA 에서 파일을 연다.
- 파일의 각 라인을 Do ~ Loop 구문을 이용해 읽는다.
- (필요하다면) 읽어 들인 라인을 배열로 전환해 필요한 정보를 취득한다.
예제
일단 단순하게 표현된 전체 코드를 한번 볼까요?
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)
계속 반복 되며, 각 라인별로 사용자가 원하는 작업을 할 수 있습니다.
생각보다 쉽죠?
끝.
댓글 남기기