Excel VBA 배열을 사용하는 방법?

매크로에 커서를 놓고 F5 키를 눌러 Visual Basic Editor에서 매크로를 실행하거나 실행할 매크로를 선택하고 실행을 클릭하여 매크로 대화 상자 (Alt + F8)를 열어 Excel에서 매크로를 실행할 수 있습니다. 이러한 매크로는 디버그> 한 단계 씩 실행 (F8 키 누름)을 사용하여 Visual Basic Editor에서 실행하여 작동하는 것을 볼 수 있도록하는 것이 가장 좋습니다. 리본 메뉴에 개발자 탭이없는 경우 지침 .. Excel을 엽니 다.

  • VBA 편집기로 이동 (Alt + F11 누름)

  • 직접 실행 창으로 이동합니다. (Ctrl + G)

  • 아래 코드를 작성하십시오.

Application.ShowDevTools = True

Excel에서 VBA 코드를 삽입하는 방법

개발자 탭> 코드 그룹> * Visual Basic

로 이동합니다.

삽입> * 모듈을 클릭합니다.

  • 빈 모듈이 열립니다.

  • 해당 모듈에 제공된 코드 쓰기 / 붙여 넣기

Untitled-1

Excel에서 VBA 코드를 실행하는 방법

코드, * Sub… End Sub

Run & Run Sub * 또는

를 클릭합니다. === F5

Untitled-1

정적 배열 변수 정보를 저장하기 위해 여러 고유 변수를 사용하는 대신 배열 변수를 사용할 수 있습니다.

배열에 저장해야하는 요소의 수를 알고 있으면 다음과 같은 정적 배열 변수를 사용할 수 있습니다.

Code`Sub TestStaticArray () ‘는 통합 문서의 10 개의 이름을 배열 변수 MyNames () Dim MyNames (1 To 10) As String’에 저장합니다. 정적 배열 변수 Dim iCount As Integer For iCount = 1 To ThisWorkbook. Sheets.Count MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name Debug.Print MyNames (iCount) Next iCount Erase MyNames () ‘변수 내용을 삭제하고 일부 메모리를 확보합니다. End Sub` ==== 디코딩

Dim MyNames (1 ~ 10) As String

단일 검증 가능한 MyNames를 문자열로 차원 화하여 10 개의 항목을 저장할 수 있습니다. 따라서 MyNames veriable은 배열 유형입니다.

Dim iCount As Integer

단일 변수 iCount를 Integer로 선언했으며 Numeric Integer 유형 값만 보유 할 수 있습니다

For iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count는 통합 문서의 시트 수를 제공합니다.

ThisWorkbook은 코드가 작성된 Workbook을 나타냅니다.

MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name

루프를 사용하여 각 시트의 이름을 MyNames라는 단일 veriable에 할당합니다. MyNames는 검증 가능한 배열 유형이므로 각 배열 항목에 각 시트 이름을 저장합니다.

Debug.Print MyNames (iCount)

배열의 각 항목에 값을 할당 한 직후에는 VBA 창의 맨 아래에 기본적으로 ImmediateWindow에 동일한 값이 인쇄됩니다.

각 값의 할당을보고 해당 값을 ImmediateWindow에 표시 할 수 있습니다.

Image

다음 iCount

Next는 통합 문서에서 iCount가 총 시트 수에 도달 할 때까지 iCount 카운터를 늘려서 동일한 작업을 다시 반복하도록 Excel VBA의 For 루프에 지시하는 데 사용됩니다.

동적 배열 변수 동적 배열 변수는 정보를 저장해야하는 요소의 수를 미리 모를 때 유용합니다.

배열 크기에 대한 정보를 제공하지 않는다는 점을 제외하면 정적 배열 변수와 마찬가지로 동적 배열 변수를 선언합니다.

위의 예 (Dim MyNames (1 to 10) As String)에서 시트 수가 10보다 크면 오류가 발생합니다. MyNames는 항목을 10 개 이상 저장할 수 없기 때문입니다.

Code`Sub TestDynamicArray () ‘는 통합 문서의 모든 이름을 배열 변수 MyNames () Dim MyNames () As String’에 저장합니다. 동적 배열 변수 Dim iCount As Integer Dim Max As Integer Max = ThisWorkbook.Sheets. Count ‘는 최대 배열 크기를 찾습니다. ReDim MyNames (1 To Max)’는 필요한 크기로 배열 변수를 선언합니다. For iCount = 1 To Max MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name MsgBox MyNames (iCount) Next iCount Erase MyNames () ‘변수 내용을 삭제하고 일부 메모리를 비 웁니다 End Sub` ==== 디코딩

Dim MyNames () As String

검증 가능한 이름 뒤에 열리고 닫히는 Paranthesis로 인해 배열 유형 인 단일 검증 가능한 MyNames를 문자열로 차원 화했지만 UpperLevel을 제공하지 않았기 때문에 데이터를 저장할 수 없습니다.

ReDim MyNames (1에서 최대)

Redim은 어레이의 차원을 재조정하는 데 사용되며 이제 어레이 유형 Veriable의 상위 레벨을 할당합니다.

이 경우 통합 문서의 총 시트 수 (Max = ThisWorkbook.Sheets.Count)

===

MsgBox MyNames (iCount)

마지막 예제에서는 직접 실행 창에있는 변수의 값을 인쇄했습니다. 이번에는 다음과 같이 나타날 MessageBox에 값을 인쇄합니다.

Image

1000 개의 항목이있는 배열 변수가 필요하다는 것을 알고 있다면 정적 변수를 사용하십시오. 단점은 매번 1000 개 항목에 대한 메모리를 사용한다는 것입니다. 또한 10 개 항목에 대한 정보 만 저장하는 경우에도 마찬가지입니다. 동적 배열 변수를 사용하면 메모리를 더 효율적으로 사용할 수 있습니다.

때때로 배열 변수의 크기를 계산할 수 없습니다. 이러한 경우 필요에 따라 배열 변수의 크기를 늘려야합니다. ReDim- 문을 사용하여 배열 변수 크기를 변경하면 ReDim Preserve- 문을 사용해야하는 배열 변수를 Redim 할 때 변수 컨텐츠가 삭제되지 않도록 변수 컨텐츠도 지워집니다.

Code`Sub GetFileNameList () ‘는 현재 폴더에있는 모든 파일 이름을 저장합니다. Dim FolderFiles () As String’은 동적 배열 변수 Dim tmp As String, fCount As Integer fCount = 0 tmp = Dir ( “D : \ Test \. “) tmp <> Empty fCount = fCount + 1 ReDim Preserve FolderFiles (1 To fCount) ‘는 배열 변수를 다시 선언합니다 (size + 1) FolderFiles (fCount) = tmp tmp = Dir Wend MsgBox fCount &”filenames are “& CurDir Erase FolderFiles ‘폴더에서 발견되면 가변 내용을 삭제하고 일부 메모리를 확보합니다. End Sub` ==== 디코딩

Dim FolderFiles () As String

검증 가능한 이름 뒤에 열리고 닫히는 Paranthesis로 인해 배열 유형 인 단일 검증 가능한 FolderFiles를 문자열로 차원 화했지만 UpperLevel을 제공하지 않았으므로 그 안에 데이터를 저장할 수 없습니다.

tmp = Dir ( “D : \ Test \.”)

Dir 명령은 디렉토리의 모든 파일 및 폴더 이름을 저장할 수있는 탐색기로 작동합니다. 모든 파일을 특정 기준으로 제한 할 수도 있습니다. Dir ( “D : \ Test \ *. pdf”)는 모든 파일에서 PDF 파일 또는 확장자로만 제한합니다.

while tmp <> Empty

대신 Excel VBA의 For 루프에서는 이번에는 Excel VBA WHILE LOOP를 사용하여 루프를 종료하는 기준이 비어 있지 않은 tmp로 설정된 동일한 동작을 반복합니다. 따라서 tmp veriable에 값이있을 때까지 루프는 작동합니다.

ReDim Preserve FolderFiles (1 To fCount)

Array Veriable FolderFiles는 시작 위치에 상위 레벨이 없습니다. 그러나 각 반복에서 ReDim 명령으로 상위 레벨을 올립니다. 첫 번째 실행 1에서 fCount까지 2 .. 등등. 그러나 상위 레벨을 올릴 때마다 이미 할당 된 모든 변수를 잃게됩니다. Preserve 명령을 사용하여 또는 이미 할당 된 값을 저장합니다.

Wend

Wend는 기준이 충족 될 때까지 동일한 작업을 다시 반복하도록 VBA의 For 루프에 지시하는 데 사용되었습니다.

MsgBox fCount & “파일 이름이”& CurDir 폴더에 있습니다

반복 할 때마다 fcout은 +1로 증가하고 최종 값은 해당 디렉토리 / 폴더에서 찾은 파일 수입니다. CurDir 명령은 현재 디렉토리의 이름을 제공합니다. 이 경우에는“D : \ Test”

Image