VBA 배열(array)은 변수 타입이며 동일한 타입의 변수 여러개를 하나의 변수에 저장하는데 사용 됩니다. 일반적인 변수는 한번에 하나의 값만 저장할 수 있습니다. 예제) Dim Student1 As Long : Student1 = 55. 배열(array)을 사용하면 동일한 데이터 항목들을 하나의 변수에 저장할 수 있습니다.
1. Array 문법 기초 동영상
2. 실습
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] 문으로 선언된 변수는 공유 사용 + 먼저 작동된 프로시저의 변수에 대한 메모리가 저장됩니다.
1. 전역 변수 코드
Public fso As Object
Public offsetY As Integer
Public offsetX As Integer
Public stRng As Range
2. Sub (프로시저) - getSubFileList()
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
3. Sub (프로시저) - getDataRecursive()
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
■ 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 문의 반복 횟수는 컬랙션 객체에 들어가 있는 데이터 개수에 달려 있습니다.
'VBA Code' 카테고리의 다른 글
재귀 함수 (0) | 2022.09.15 |
---|---|
배열(array) #2 (0) | 2022.09.14 |
VAB 딜레이 (0) | 2021.03.30 |
엑셀 - 차트 만들기 (0) | 2021.03.20 |
특수 문자 제거 함수 (0) | 2021.02.23 |