본문 바로가기
  • Welcome!
VBA VB.Net Code

배열(array) #1

by ToolBOX01 2022. 9. 7.
반응형

□ 배열의 필요성

배열은 여러 개의 값을 하나의 변수에 저장하여 관리하는 데 매우 유용한 도구입니다. 마치 서랍장에 여러 물건을 정리해 놓듯이, 배열은 데이터를 효율적으로 관리하고 복잡한 작업을 간소화하는 데 도움을 줍니다. VBA 배열(array)은 변수 타입이며 동일한 타입의 변수 여러개를 하나의 변수에 저장하는데 사용 됩니다.  일반적인 변수는  한번에 하나의 값만 저장할 수 있습니다. 예제) Dim Student1 As  Long  : Student1 = 55. 배열(array)을 사용하면 동일한 데이터 항목들을 하나의 변수에 저장할 수 있습니다. 

□배열을 사용해야 하는 이유

  1. 데이터의 효율적인 관리:
    • 여러 값을 한 번에 처리: 반복적인 작업을 줄이고 코드를 간결하게 만들 수 있습니다.
    • 데이터 구조화: 데이터를 체계적으로 정리하여 가독성을 높이고 오류 발생 가능성을 줄입니다.
    • 빠른 데이터 접근: 배열의 인덱스를 사용하여 원하는 값에 직접 접근할 수 있어 처리 속도를 향상시킵니다.
  2. 복잡한 연산의 간소화:
    • 반복문과의 결합: For Each, For Next 등의 반복문과 함께 사용하여 여러 데이터를 순차적으로 처리할 수 있습니다.
    • 조건문과의 결합: If, Then, Else 등의 조건문과 함께 사용하여 데이터를 필터링하거나 특정 조건에 맞는 값을 찾을 수 있습니다.
    • 함수와의 결합: 사용자 정의 함수를 만들어 배열을 매개변수로 전달하고 다양한 연산을 수행할 수 있습니다.
  3. 메모리 효율성:
    • 동일한 자료형의 데이터 저장: 메모리를 효율적으로 사용할 수 있습니다.
    • 필요한 만큼의 메모리 할당: 동적 배열을 사용하여 필요한 만큼의 메모리만 할당할 수 있습니다.
[강의 동영상]
[예제 동영상]
엑셀 이미지 코드
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


■ 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

예제 코드: 

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

▷추가 자료

 

배열(array) #2

□ 동적 배열이란?  동적 배열은 프로그램 실행 중에 크기를 조절할 수 있는 배열을 의미합니다. 즉, 미리 정해진 고정된 크기가 아닌, 필요에 따라 크기를 늘리거나 줄일 수 있다는 것이죠. 이

tool-2020.tistory.com

 

 

배열을 사용하여 Drop Down List 만들기

Excel VBA to Create Data Validation List from Array This article demonstrates how to create a data validation list from an array with Excel VBA. Read the article to flourish your knowledge. www.exceldemy.com Code Sub data_validation_from_array() Dim region

tool-2020.tistory.com

 

'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