엑셀에 있는 데이터를 다른 데이터 저장소로 옮기기 위해서는 백업 기능을 이용해야 합니다. 하지만 데이터를 백업하는 과정에서 사용자가 필요 없다고 생각하는 것들을 걸러내는 기능이 미흡합니다. 이런 경우에는 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 시트 테두리 선 그리는 방법 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 문자열 자르기, LEFT RIGHT 함수를 이용해 문자열 추출하는 방법 (0) | 2022.10.07 |
---|---|
엑셀 VBA 체크 박스 CheckBox 컨트롤 사용하기 (0) | 2022.09.25 |
엑셀 VBA 데이터 분리해서 다른 시트에 붙여 넣기 (3) | 2022.08.30 |
엑셀 VBA 셀 참조하는 여러가지 방법 (3) | 2022.08.20 |
엑셀 VBA 셀을 병합하는 Merge 함수 사용하기 (1) | 2022.08.11 |
엑셀 VBA 문자열 글자 하나씩 추출하기 (0) | 2022.07.15 |
엑셀 VBA 워크시트, 셀 선택되었을 때 실행되는 이벤트 함수 구현하기 (0) | 2022.07.09 |
엑셀 VBA Application.Evaluate 사용해서 수식 계산하기 (0) | 2022.07.07 |