엑셀에 있는 데이터를 다른 데이터 저장소로 옮기기 위해서는 백업 기능을 이용해야 합니다. 하지만 데이터를 백업하는 과정에서 사용자가 필요 없다고 생각하는 것들을 걸러내는 기능이 미흡합니다. 이런 경우에는 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 동일한 글자색 셀 개수 구하기 (9) | 2024.03.02 |
---|---|
엑셀 VBA 이미지 셀 영역에 맞춰서 넣기, ShapeRange 함수 이용 (2) | 2024.02.28 |
엑셀 VBA 지정한 파일 삭제하기 (0) | 2024.02.17 |
엑셀 VBA 행 열 숨기기와 보이기 구현 (0) | 2024.02.11 |
엑셀 VBA - Value, Formula, FormulaR1C1, Text 속성으로 값 입력 및 읽기 (1) | 2024.01.24 |
엑셀 VBA 사용자가 선택한 영역 값, 셀 주소 정보 알아 내는 방법 (2) | 2024.01.21 |
엑셀 VBA 셀 참조하는 여러가지 방법 (4) | 2024.01.11 |
엑셀 VBA 이항 논리 연산자 And, Or, Xor 와 단항 논리 연산자 Not 사용하기 (1) | 2024.01.03 |