Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA 시트에 있는 내용을 파일, 텍스트로 출력하기

엑셀(Excel)/VBA
반응형

엑셀에 있는 데이터를 다른 데이터 저장소로 옮기기 위해서는 백업 기능을 이용해야 합니다. 하지만 데이터를 백업하는 과정에서 사용자가 필요 없다고 생각하는 것들을 걸러내는 기능이 미흡합니다. 이런 경우에는 VBA 를 이용해서 데이터를 백업해야 합니다. 시간은 조금 더 오래 걸리겠지만 얼마든지 데이터를 분석해서 필요한 것들만 추려서 백업하는 것이 가능합니다.

 

텍스트 파일로 백업할 내용은 다음과 같습니다. VBA 에서 이 데이터들을 모두 읽어 동일하게 입력할 것입니다.

 

먼저 함수에서 사용할 변수를 정의 합니다. 파일이 저장될 위치를 지정하기 위해서 Application.DefaultFilePath 속성을 사용하였습니다. 이것은 사용자가 이전에 파일을 저장할 때 지정했던 경로가 나옵니다. 저 같은 경우 “C:\Users\Documents” 입니다. 

 

Dim filename As String, rng As Range, cellValue As Variant
Dim i As Integer, j As Integer
 
filename = Application.DefaultFilePath & "\members.txt"

 

 

다음은 저장할 데이터가 있는 영역을 가져올 차례입니다. 다양한 방법들 중에서 선택한 영역만 가져오기를 원한다면 Selection 을 사용해야 합니다. 그게 아니라 시트에 있는 전체 영역을 저장하고자 한다면 CurrentRegion 속성을 사용하시면 됩니다. 

 

‘Set rng = Selection
Set rng = ActiveSheet.Range("A1").CurrentRegion

 

 ※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 워크시트 개체를 이용해서 시트 관리하는 방법
엑셀 VBA 영역 선택하는 여러가지 방법
엑셀 VBA 데이터 분리해서 다른 시트에 붙여 넣는 방법
엑셀 VBA 시트에서 데이터 영역 구하는 방법
셀 VBA 시트 테두리 그리는 방법

 


다음은 데이터를 저장할 파일 개체를 생성해야 합니다. filename 경로에 파일을 만들어 #1 에 입력할 수 있도록 개체를 만듭니다. For Output As #1 이면 엑셀에 있는 데이터를 출력하는 것이고 For Input As #1 이면 외부 파일에 내용을 불러오는 것이 됩니다. 

 

Open filename For Output As #1

 

 

다음은 이중 For 문을 사용해서 셀을 하나씩 꺼냅니다. 그리고 변수에 담습니다.  

 

For i = 1 To rng.Rows.Count
For j = 1 To rng.Columns.Count
        cellValue = rng.Cells(i, j).Value
Next j
Next i

 

 

위에서 하나씩 꺼낸 셀 값은 If j = rng.Columns.Count Then 로 행이 바뀌었는지 판단합니다. 그리고 셀 별로 데이터를 구분하기 위해서 구분자로 “,” 가 추가 됩니다. 

 

If j = rng.Columns.Count Then
Write #1, cellValue
Else
Write #1, cellValue,
End If

 

 

마지막에 잊지 말아야 할 것이 파일 개체를 닫는 것입니다.   

 

Close #1

 

 

위에서 지금까지 설명한 전체 소스는 다음과 같습니다. 실행한 결과 모든 데이터에는 쌍따움표(“) 로 감싸고 있으며 데이터간의 구분은 “,” 가 추가 되어 있습니다. 

 

Sub TextWrite()
   
    Dim filename As String, rng As Range, cellValue As Variant
    Dim i As Integer, j As Integer
   
    filename = Application.DefaultFilePath & "\members.txt"
   
    'Set rng = Selection
    Set rng = ActiveSheet.Range("A1").CurrentRegion
   
    Open filename For Output As #1
   
    For i = 1 To rng.Rows.Count
       
        For j = 1 To rng.Columns.Count
   
            cellValue = rng.Cells(i, j).Value
            
            If j = rng.Columns.Count Then
                 Write #1, cellValue
            Else
                 Write #1, cellValue,
            End If
   
        Next j
    Next i
   
    Close #1
End Sub

 

 ※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 워크시트 개체를 이용해서 시트 관리하는 방법
엑셀 VBA 영역 선택하는 여러가지 방법
엑셀 VBA 데이터 분리해서 다른 시트에 붙여 넣는 방법
엑셀 VBA 시트에서 데이터 영역 구하는 방법
셀 VBA 시트 테두리 그리는 방법
반응형
Posted by 녹두장군

댓글을 달아 주세요