□ 배열의 필요성
배열은 여러 개의 값을 하나의 변수에 저장하여 관리하는 데 매우 유용한 도구입니다. 마치 서랍장에 여러 물건을 정리해 놓듯이, 배열은 데이터를 효율적으로 관리하고 복잡한 작업을 간소화하는 데 도움을 줍니다. VBA 배열(array)은 변수 타입이며 동일한 타입의 변수 여러개를 하나의 변수에 저장하는데 사용 됩니다. 일반적인 변수는 한번에 하나의 값만 저장할 수 있습니다. 예제) Dim Student1 As Long : Student1 = 55. 배열(array)을 사용하면 동일한 데이터 항목들을 하나의 변수에 저장할 수 있습니다.
□배열을 사용해야 하는 이유
- 데이터의 효율적인 관리:
- 여러 값을 한 번에 처리: 반복적인 작업을 줄이고 코드를 간결하게 만들 수 있습니다.
- 데이터 구조화: 데이터를 체계적으로 정리하여 가독성을 높이고 오류 발생 가능성을 줄입니다.
- 빠른 데이터 접근: 배열의 인덱스를 사용하여 원하는 값에 직접 접근할 수 있어 처리 속도를 향상시킵니다.
- 복잡한 연산의 간소화:
- 반복문과의 결합: For Each, For Next 등의 반복문과 함께 사용하여 여러 데이터를 순차적으로 처리할 수 있습니다.
- 조건문과의 결합: If, Then, Else 등의 조건문과 함께 사용하여 데이터를 필터링하거나 특정 조건에 맞는 값을 찾을 수 있습니다.
- 함수와의 결합: 사용자 정의 함수를 만들어 배열을 매개변수로 전달하고 다양한 연산을 수행할 수 있습니다.
- 메모리 효율성:
- 동일한 자료형의 데이터 저장: 메모리를 효율적으로 사용할 수 있습니다.
- 필요한 만큼의 메모리 할당: 동적 배열을 사용하여 필요한 만큼의 메모리만 할당할 수 있습니다.
엑셀 이미지 | 코드 |
1.변수 "students"를 선언 합니다. Dim arrStudent1 As Long 2. 학생들의 이름을 가져올수 있도록 배열 (array)의 크기를 정의 합니다 Dim arrStudents(1 To 5) As Long 3.배열(array) 기능을 통해 학생의 이름을 "순서 적"으로 가져올수 있습니다. arrStudents(i) = ws.Range("A1").Offset(i).Value |
특정 폴더에 있는 파일들을 리스트로 만들고자 합니다. 폴더 아래에 있는 모든 하위 폴더를 리스트로 만듭니다. 하위 폴더에 있는 파일 이름과 정보를 표시 합니다.
위 사이트의 예제의 프로시저는 2개 입니다. 프로시저 2군데 모두 사용을 위해 전역 매개 변수를 사용 합니다.
- 모든 변수 설정은 Dim으로 하게 되지만 중급, 고급으로 프로그램 개발을 하면서, 만들어야 하는 Sub (프로시저)가 많아집니다. 변수 선언이 많이 겹치게 된다. (특히 i as Integer 같은) 그럴 때 모든 Sub (프로시저)에서 똑같은 변수를 사용할 수 있게 하는 선언문이 있는데, 바로 전역 변수의 선언문인 [Private] 와 [Public]를 사용 합니다
[Private] 문으로 선언된 변수는 같은 코드 창 내의 모든 프로시저가 공유해 사용을 합니다
[Public] 문으로 선언된 변수는 공유 사용 + 먼저 작동된 프로시저의 변수에 대한 메모리가 저장됩니다.
■ For Each ~ Next 문법
For Each ~ Next 문법 | For Each ~ Next 예시 |
For Each 개별 객체 In 배열객체 반복 수행할 코드 Next |
Sub ForEach01() arrData = Array(4, 5, 6, 7, 8, 9, 10) For Each kData In arrData Debug.Print kData Next End Sub |
"In "문을 기준으로 오른쪽에는 여러 데이터가 들어간 배열 객체를 입력합니다. 왼쪽은 배열 객체에서 차례대로 하나씩 꺼낸 개별 객체가 담길 변수명을 입력합니다. For 문은 배열의 마지막 요소의 값에 이를 때까지 반복합니다. For 문의 반복 횟수는 컬랙션 객체에 들어가 있는 데이터 개수에 달려 있습니다.
예제 코드:
Public fso As Object
Public offsetY As Integer
Public offsetX As Integer
Public stRng As Range
sub getSubFileList()
Dim fsoFolder As Object
Dim aSht As Worksheet
Dim rootpath As String
'사용자 입력 Root Path
rootpath = "C:\PTC\WORK60\"
offsetX = 0
offsetY = 0
Set aSht = ActiveSheet
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsoFolder = fso.GetFolder(rootpath)
Set stRng = aSht.Range("B2")
getDataRecursive fsoFolder
End Sub
Sub getDataRecursive(ByVal baseFolder As Object)
Dim tmpSubFolders As Object
Dim tmpFiles As Object
Dim tmpRng As Range
offsetX = offsetX + 1
Set tmpSubFolders = baseFolder.subFolders
Set tmpFiles = baseFolder.Files
For Each c In tmpFiles
stRng.Offset(offsetY, offsetX).Value = c.Name ''파일명
stRng.Offset(offsetY, offsetX - 2).Value = offsetY + 1 ''인덱스
stRng.Offset(offsetY, offsetX - 1).Value = c.ParentFolder.Path ''경로명
stRng.Offset(offsetY, offsetX + 1).Value = c.Size / 1000# & "kb" ''파일용량
stRng.Offset(offsetY, offsetX + 2).Value = c.DateCreated ''만든날짜
stRng.Offset(offsetY, offsetX + 3).Value = c.DateLastModified ''수정한날짜
stRng.Offset(offsetY, offsetX + 4).Value = c.Type ''파일타입
offsetY = offsetY + 1
Next c
offsetX = offsetX - 1
For Each d In tmpSubFolders
Dim tmpSub As Object
Set tmpSubs = fso.GetFolder(d)
getDataRecursive tmpSubs
Next d
End Sub
▷추가 자료
'VBA VB.Net Code' 카테고리의 다른 글
재귀 함수 (0) | 2022.09.15 |
---|---|
배열(array) #2 (0) | 2022.09.14 |
VAB 딜레이 (0) | 2021.03.30 |
엑셀 - 차트 만들기 (0) | 2021.03.20 |
특수 문자 제거 함수 (0) | 2021.02.23 |