본문 바로가기
  • Welcome!
VBA Code

배열(array) #1

by ToolBOX01 2022. 9. 7.
반응형

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

 

■ 자세한것은 아래 사이트를 참고 하십시요 

 

[VBA] 배열 완벽 가이드

이 포스트는 Excel Macro Mastery 사이트의 'Excel VBA Array – The Complete Guide(by Paul Kelly)'의 내용을 다시 정리한 것입니다. 이번 포스트에서는 엑셀 VBA의 배열(array)에 대해 다룹니다. 들어가며 본..

kukuta.tistory.com

 


특정 폴더에 있는 파일들을 리스트로 만들고자 합니다. 폴더 아래에 있는 모든 하위 폴더를 리스트로 만듭니다. 하위 폴더에 있는 파일 이름과 정보를 표시 합니다.

 

[ 프로그램 실행 결과 ]

 

[vba] 하위폴더 내의 모든 파일 정보 가져오기

일을 하다 보면 가끔 업무를 진행하던 경로 하위에 있는 데이들의 리스트를 만들어야 하는 경우가 있습니다. 하나의 폴더라면 어떻게 해보겠는데 그 폴더가 하위 뎁스가 연속해서 있고 저장되

diy-dev-design.tistory.com

 

위 사이트의 예제의 프로시저는 2개 입니다. 프로시저 2군데 모두 사용을 위해 전역 매개 변수를 사용 합니다.

 

-  모든 변수 설정은 Dim으로 하게 되지만 중급, 고급으로 프로그램 개발을 하면서, 만들어야 하는 Sub (프로시저)가 많아집니다. 변수 선언이 많이 겹치게 된다. (특히 i as Integer 같은) 그럴 때 모든 Sub (프로시저)에서 똑같은 변수를 사용할 수 있게 하는 선언문이 있는데, 바로 전역 변수의 선언문인 [Private] 와 [Public]를 사용 합니다

[Private] 문으로 선언된 변수는 같은 코드 창 내의 모든 프로시저가 공유해 사용을 합니다
[Public] 문으로 선언된 변수는 공유 사용 + 먼저 작동된 프로시저의 변수에 대한 메모리가 저장됩니다.

 

 

 

[엑셀 VBA] Private, Public 문을 사용하는 변수 사용

VBA초급 시절에는 모든 변수 설정은 Dim으로 하게 되지만 중급~고급으로 넘어가면서 만들어야 하는 Sub가 많아지면서 변수 선언이 많이 겹치게 된다. (특히 i as Integer 같은) 그럴 때 모든 Sub(프로시

separang.tistory.com

 

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 반복문 For Next, For Each Next 사용하기

VBA 에서 사용하는 반복문에는 For 가 있습니다. 반복 횟수를 지정해서 작업을 수행하고 싶을 때 사용합니다. 반복문을 구성하는 형태는 두 가지가 있습니다. For ~ Next 와 For Each ~ Next 로 나눠집니

mainia.tistory.com

 

 

 

 

 

'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