excel vba array array methods with examples
이 자습서에서는 프로그래밍 예제를 사용하여 VBA 배열, 다양한 배열 유형, 변형 배열 및 배열 방법을 설명합니다.
일반 VBA 변수는 단일 데이터의 값을 저장하는 자리 표시 자입니다. 1 대 1 관계, 즉 1 값에 대해 1 변수가 있습니다.
이제 동일한 유형의 여러 값을 저장한다고 상상해보십시오. 여러 변수를 만드는 대신 하나의 변수를 만들고 동일한 유형의 값을 모두 저장할 수 있습니다. 이 변수를 ARRAY라고합니다.
=> 모두를위한 VBA 교육 시리즈를 보려면 여기를 방문하십시오.
컴퓨터 소프트웨어의 오류는 무엇입니까?
이 자습서에서는 고정 및 동적과 같은 다양한 유형의 배열과 함께 VBA 배열, 1 차원 및 2 차원 배열이 무엇인지 알게됩니다. 또한 VBA에서 사용되는 다양한 배열 방법을 이해합니다.
학습 내용 :
VBA 어레이
배열은 동일한 데이터 유형의 여러 값을 저장할 수있는 특수한 종류의 변수입니다.
예를 들면 100 명의 직원 이름이있는 경우 데이터 유형 문자열의 변수 100 개를 만드는 대신 문자열 유형의 배열 변수 하나를 만들고 동일한 배열 변수에 100 개의 값을 할당 할 수 있습니다.
1 차원 배열
단일 행 또는 단일 열에 모든 요소가있는 배열을 1 차원 배열이라고합니다. 단일 열에 수업에있는 모든 학생의 이름을 나열하는 것은 1 차원 배열의 예입니다. 아래와 같이 선언됩니다.
Dim arrayname (하한에서 상한으로) 데이터 유형으로
배열을 선언하는 방법에는 여러 가지가 있습니다. 다음은 몇 가지 예입니다.
예:
# 1) Dim MyArrayExample (0 ~ 3) As Integer
정수 값을 허용하는 위치 0,1,2,3을 사용하여 배열을 만듭니다.
# 2) Dim MyArray2 (3) As String
기본값은 0에서 3까지이며 문자열 값을 허용하는 0,1,2,3 위치의 배열을 만듭니다.
# 3) Dim MyArray2 (13 ~ 15) As Double
13, 즉 13, 14 및 15로 시작하는 배열을 만들고 Double 값을 허용합니다. 하한을 13으로 언급 했으므로 배열은 0이 아닌 위치 13에서 값을 할당하기 시작합니다.
간단한 코드를 만들고 배열 선언의 3 가지 방법을 모두 이해해 보겠습니다.
노트 : VB 코드를 작성하려면 Microsoft Excel을 엽니 다 (지원되는 버전은 Excel 2007, 2010, 2013, 2016, 2019). 로 이동 개발자 탭-> Visual Basic (또는 단축키 Alt + F11 사용). VB 편집기에서 삽입-> 모듈 아래 코드를 붙여 넣으세요.
다양한 유형의 선언을 보여주는 아래 절차를 고려하십시오.
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String ‘creates array with index 0,1,2 firstQuarter(0) = 'Jan' firstQuarter(1) = 'Feb' firstQuarter(2) = 'Mar' MsgBox 'First Quarter in calendar ' & ' ' & firstQuarter(0) & ' ' & firstQuarter(1) & ' ' & firstQuarter(2) End Sub Private Sub arrayExample2() Dim secondQuarter(2) As String ‘creates array with index 0,1,2 secondQuarter(0) = 'April' secondQuarter(1) = 'May' secondQuarter(2) = 'June' MsgBox 'Second Quarter in calendar ' & ' ' & secondQuarter(0) & ' ' & secondQuarter(1) & ' ' & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String ‘creates array with index 13,14,15 thirdQuarter(13) = 'July' thirdQuarter(14) = 'Aug' thirdQuarter(15) = 'Sep' MsgBox 'Third Quarter in calendar ' & ' ' & thirdQuarter(13) & ' ' & thirdQuarter(14) & ' ' & thirdQuarter(15) End Sub
F5 키를 누르거나 도구 모음에서 실행 버튼을 눌러 코드를 실행합니다.
일반 변수 대 배열 변수
이제 우리는 1 차원 배열이 어떻게 작동하는지 알게되었습니다. 그럼 잠시 시간을내어 프로그래밍 언어에서 배열이 중요한 이유를 이해하겠습니다.
직원 5 명의 급여를 입력해야한다고 가정합니다. 정규 변수를 사용하여이를 달성하려면 5 개의 변수를 생성해야합니다.
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') ' Declare variable for each student Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Read student marks from cell Emp1 = shet.Range('A' & 2).Value Emp2 = shet.Range('A' & 3).Value Emp3 = shet.Range('A' & 4).Value Emp4 = shet.Range('A' & 5).Value Emp5 = shet.Range('A' & 6).Value ' Print student marks Debug.Print 'Emp Name' Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
이제 Array 변수를 사용하여 동일한 코드를 작성해 보겠습니다.
Option Explicit Public Sub ArrayVarible() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') Dim Employee(1 To 6) As String Dim i As Integer For i = 1 To 6 Employee(i) = shet.Range('A' & i).Value Debug.Print Employee(i) Next i End Sub
여기에서는 모든 직원 이름을 저장할 하나의 배열 변수를 사용했습니다. 직원 이름을 100 개 더 추가하고 배열 크기 만 변경하고 새 변수를 만들 필요가 없다고 가정합니다.
이렇게하면 코드의 줄 수가 줄어들어 쉽게 이해하고 읽을 수 있습니다.
2 차원 배열
2 차원 배열에는 2 개의 인덱스가 있습니다. 첫 번째 인덱스는 행을 나타내고 두 번째 인덱스는 열을 나타냅니다. 여러 행과 열이 있으며 일반적으로 테이블 형식으로 표시됩니다.
2 차원 배열의 선언은 다음과 같습니다.
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) As DataType.
3 개의 과목에서 얻은 2 명의 학생의 마크를 저장하는 예를 고려하십시오. 그래서 우리는 2 개의 행과 3 개의 열을 취하는 2 차원 배열을 만들 것입니다.
1 행에서 2 행으로, 1 열에서 3 열로 배열을 시작합니다.
Sub Twodim() Dim totalMarks(1 To 2, 1 To 3) As Integer totalMarks(1, 1) = 23 totalMarks(2, 1) = 34 totalMarks(1, 2) = 33 totalMarks(2, 2) = 55 totalMarks(1, 3) = 45 totalMarks(2, 3) = 44 Msgbox “Total Marks in Row 2 and column 2 is “ &totalMarks(2,2) Msgbox “Total Marks in Row 1 and column 3 is “ &totalMarks(1,3) End Sub
F5를 누르거나 툴바에서 실행 버튼을 눌러 코드를 실행합니다.
행 2 및 열 2
1 행 및 3 열
고정 어레이
정적 배열이라고도하는 고정 배열에는 고정 된 하한과 상한이 있으며이 크기는 런타임에 변경할 수 없습니다. 배열의 크기는 괄호 안에 선언하는 동안 지정됩니다. 위의 모든 예제는 선언 중에 크기를 언급했듯이 고정 배열입니다.
고정 배열은 일반적으로 배열의 크기를 확신 할 때 사용됩니다. 예를 들면 한주의 일 수, 하한이 0이고 상한이 6 인 배열을 만들 수 있으며 크기를 절대 변경하지 않을 것입니다.
동적 배열
동적 배열을 사용하면 런타임 중에 배열의 크기를 조정할 수 있습니다. 배열의 크기가 확실하지 않을 때 유용합니다. 대학 입학에서 실제로 얼마나 많은 학생이 입학 할 것인지 확신 할 수 없어서 디자인이나 선언 시간에 크기를 결정할 수 없다고 가정합니다.
동적 배열의 선언은 빈 괄호가있는 정적 배열과 유사합니다.
Dim Employee () As String
리딤
우리가 사용해야 할 크기를 변경하고 싶을 때 리딤 , 하한은 변경할 수 없으며 배열의 상한 만 변경할 수 있습니다.
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ‘ Redim will help to change the array size during runtime dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled after ' & curdate & ' are “ & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) End Sub
이제 런타임 중에 배열의 크기를 변경할 수 있으므로 배열의 ubound를 늘릴 필요가있을 때마다 ReDim 문을 사용할 수 있습니다. 배열 크기를 한 번 더 늘리고 새 학생 이름을 추가해 보겠습니다.
Sub RedimExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim dynArray(3) ‘ Redim will reinitialise the array and destroy the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
결과에 이전에 추가 된 학생의 이름이 표시되지 않고 null 값이 제공되는 것을 관찰했을 것입니다. Redim 문이 새 크기로 새 배열을 만들고 이전 값을 파괴하기 때문입니다.
ReDim 보존
Represerve 문은 이전 값을 보존하고 배열 크기를 늘림으로써 ReDim의 한계를 극복하는 데 도움이됩니다.
ReDim Preserve를 사용하여 위 코드를 다시 작성해 보겠습니다.
Sub preserveExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim preserve dynArray(3) ‘ Redim preserve will retain the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
preserve 키워드를 사용 했으므로 이전에 입력 한 값은 손실되지 않고 새 값이 성공적으로 추가됩니다.
변형 배열
지금까지 우리는 같은 유형의 값을 받아들이는 배열을 보았습니다. 이제 배열을 변형으로 선언하고 String, Date, Long, Integer와 같은 다양한 유형의 데이터를 단일 배열에 저장하겠습니다.
예:
Sub arrayVariant() Dim arrayData(3) As Variant arrayData(0) = 'Vikram Vikrant' arrayData(1) = 411234567890# arrayData(2) = 38 arrayData(3) = '06-09-1972' MsgBox 'Details of person ' & arrayData(0) & ' is ' & ' Phone No ' & arrayData(1) & ' ,Id ' & arrayData(2) & ' ,DOB ' & arrayData(3) End Sub
VBA 배열 방법
VBA 배열에는 아래에 언급 된대로 다양한 기능을 수행하는 데 도움이되는 몇 가지 방법이 있습니다.
Sl. 아니 | 이름 | 통사론 | 기술 |
---|---|---|---|
7 | 어울리다 | Join (원본 배열, (구분 기호)) | 배열의 여러 부분 문자열을 결합하고 문자열 값을 반환합니다. |
1 | 정렬 | 어레이 (사기성) | 정규 변형을 변환합니다. 변수를 배열에 추가합니다. |
두 | 삭제 | 어레이 이름 지우기 | 고정 크기 배열을 다시 초기화하는 데 사용됩니다. 동적 배열을위한 메모리를 해제합니다. |
삼 | IsArray | IsArray (변수 이름) | 변수가 배열인지 확인합니다. |
4 | Lbound | LBound (배열 이름, (차원)) | 가장 낮은 첨자를 반환합니다. 배열의. |
5 | Ubound | UBound (배열 이름, (차원)) | 가장 높은 첨자를 반환합니다. 배열의. |
6 | 스플릿 | Split (표현식, (구분 기호, (제한, (비교)))) | 문자열을 여러 하위 문자열로 나누고 0 기반 배열을 반환합니다. |
8 | 필터 | 필터 (소스 배열, 일치, (포함, (비교))) | 필터를 사용하면 배열에서 지정된 일치. |
예를 들어 각각에 대해 자세히 설명하겠습니다.
# 1) 어레이
일반 변형 변수를 선언하고 배열로 사용하겠습니다. 정규 변형 변수를 배열로 변경하려면 다음을 사용해야합니다. 정렬 아래 예와 같이 기능합니다.
배열 함수는 쉼표로 구분 된 값을 포함하는 인수를 허용합니다. 이러한 값은 배열의 요소로 할당됩니다.
Sub variantArray() Dim varData As Variant varData = Array('Mon Bel', '+61 112334123', 567, '06-09-1972') MsgBox 'Details of person ' & varData(0) & ' is ' & ' Phone No ' & varData(1) & ' ,Id ' & varData(2) & ' ,DOB ' & varData(3) End Sub
인덱스를 사용하여 배열 변수를 식별해야하므로 위의 예에서 값은 varData (0) varData (2) varData (3)로 검색됩니다.
# 2) 지우기
이 함수는 고정 크기 배열에 입력 된 모든 값을 지우고 동적 배열을위한 메모리 공간을 확보합니다.
구문 : Erase arrayname
지우기는 아래와 같이 데이터 유형에 따라 다르게 작동합니다.
- 고정 숫자의 경우 : 모든 값이 0으로 재설정됩니다.
- 고정 문자열 데이터 유형의 경우 : 모든 값은 길이가 0으로 재설정됩니다.
- 동적 배열의 경우 : 어레이에서 사용하는 메모리를 해제합니다.
예:
Sub eraseExample() Dim NumArray(3) As Integer Dim decArray(2) As Double Dim strArray(2) As String NumArray(0) = 12345 decArray(1) = 34.5 strArray(1) = 'Erase Function' Dim DynaArray() ReDim DynaArray(3) MsgBox ' Values before Erase ' & (NumArray(0)) & ',' & (decArray(1)) & ' , ' & (strArray(1)) Erase NumArray Erase decArray Erase strArray Erase DynaArray ' Free the memory ' All values are erased. MsgBox ' Values after Erase ' & NumArray(0) & ',' & decArray(1) & ' , ' & strArray(1) End Sub
지우기 기능을 사용하기 전 결과
지우기 사용 후 결과
# 3) IsArray
이 함수는 주어진 입력 변수가 배열인지 여부를 결정하는 데 사용됩니다. 입력 된 변수가 참이면 참을 반환하고 그렇지 않으면 거짓을 반환합니다.
구문 : IsArray (변수 이름)
예:
Sub isArrayTest() Dim arr1, arr2 As Variant arr1 = Array('Jan', 'Feb', 'Mar') arr2 = '12345' MsgBox ('Is arr1 an Array : ' & IsArray(arr1)) MsgBox ('Is arr2 an Array : ' & IsArray(arr2)) End
첫 번째 Msgbox의 결과
두 번째 msgbox의 결과
# 4) Lbound
Lbound 함수의 인수로 지정된 배열의 가장 낮은 첨자를 반환합니다.
구문 : LBound (ArrayName, (Dimension))
ArrayName은 배열의 이름입니다.
Dimension은 선택적 정수 값입니다. 배열에 여러 차원이있는 경우 Lbound를 결정할 차원을 지정할 수 있습니다.
예:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Returns 1. Result2 = LBound(ArrayValue, 3) ' Returns 10. Result3 = LBound(Arraywithoutlbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 5) Ubound
Ubound 함수에서 인수로 지정된 배열의 위쪽 첨자를 반환합니다.
구문 : UBound (ArrayName, (Dimension))
ArrayName은 배열의 이름입니다.
Dimension은 선택적 정수 값입니다. 배열에 여러 차원이있는 경우 Ubound를 결정할 차원을 지정할 수 있습니다.
예:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 6) 분할
주어진 전체 문자열에서 파생 된 여러 하위 문자열이있는 배열을 반환합니다.
구문 : Split (expression, (delimiter, (limit, (compare))))
- 표현: 이것은 부분 문자열을 생성하는 데 사용될 전체 문자열입니다.
- 구분자 : 지정된 구분 기호를 사용하여 하위 문자열이 생성됩니다. 이것이 언급되지 않으면 공백이 구분 기호로 간주됩니다.
- 한도: 반환 할 부분 문자열의 수입니다.
- 비교: 하위 문자열이 생성 된 후 다른 비교 옵션을 사용하여 결과를 테스트 할 수 있습니다.
예: 아래 예에서는 구분 기호를 –로 사용하고 제한을 3으로 사용합니다.
따라서 split 함수는 구분 기호를 기반으로 전체 문자열을 하위 문자열로 분리합니다. 그러나 우리는 또한 한계를 3으로 언급 했으므로 한계 3 이후에는 하위 문자열이 형성되지 않습니다. 따라서 마지막 구분 기호는 건너 뜁니다.
Sub splitExample() Dim MyString As String Dim Result() As String Dim DisplayText As String MyString = 'This is the example for-VBA-Split-Function' Result = Split(MyString, '-',3) MsgBox Result(0) & vbNewLine & Result(1) & vbNewLine & Result(2) & vbNewLine & Result(3) End Sub
# 7) 가입
이것은 분할의 반대입니다. Join은 여러 하위 문자열을 결합하여 하나의 문자열을 만듭니다.
구문 : Join (sourcearray, (delimiter))
Sourcearray : 하나로 결합하려는 1 차원 문자열 배열입니다.
구분자 : 결합하는 동안 각 문자열 뒤에 지정된 구분 기호가 추가됩니다.
예:
Sub joinExample() Dim Result As String Dim dirarray(0 To 2) As String dirarray(0) = 'D:' dirarray(1) = 'SoftwareTestingHelp' dirarray(2) = 'Arrays' Result = Join(dirarray, '') MsgBox 'Date after joining ' & Result End Sub
세 가지 값이 모두 결합되고 가 구분 기호로 를 언급했듯이 각 단어 사이에 배치됩니다.
빈 파일 오프너 무료 다운로드 창
# 8) 필터
필터를 사용하면 배열에서 지정된 일치 항목을 검색 할 수 있습니다. 필터 기준에 따라 문자열 배열의 하위 집합이 반환됩니다.
구문 : Filter (sourcearray, match, (include, (compare)))
예:
Sub filterExample() Dim Mystring As Variant Mystring = Array('Software Testing', 'Testing help', 'Software help') filterString = Filter(Mystring, 'help') MsgBox 'Found ' & UBound(Mystring) - LBound(Mystring) + 1 & ' words matching the criteria ' End Sub
이 예에서는 filter 함수를 사용하여 모든 배열 문자열에서 'help'라는 단어를 검색합니다.
자주 묻는 질문
Q # 1) VBA에서 어레이 길이를 얻는 방법은 무엇입니까?
대답: 배열의 길이를 얻기 위해 Ubound 함수를 사용합니다. 이 함수는 지정된 배열의 위쪽 첨자를 제공합니다.
Q # 2) VBA에서 배열을 선언하는 방법은 무엇입니까?
답 : 1 차원 배열은 아래와 같이 선언됩니다.
Dim arrayname (하한에서 상한으로) 데이터 유형으로
예: Dim Myarray (0 To 2) As Integer
2 차원 배열은 아래와 같이 선언됩니다.
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) As DataType.
예: Dim mark (1 to 3, 0 to 2) As Integer
Q # 3) 범위를 배열로 변환하는 방법은 무엇입니까?
대답: Transpose 함수를 사용하여 범위를 배열로 변환 할 수 있습니다. 이 코드는 Mys (10)를 생성합니다.
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
Q # 4) VBA의 어레이 변형이란 무엇입니까?
대답: 변형 배열은 인덱스에 대해 모든 종류의 데이터 유형을 허용합니다. 즉, 단일 배열에 여러 유형의 값을 저장할 수 있습니다.
예:
Dim arrayData (3) As Variant
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
Q # 5) 옵션 기본 진술이란 무엇입니까?
대답: 이것은 배열의 하위 첨자를 선언하는 데 사용되며 모듈 시작시 사용됩니다. 기본적으로 모듈 수준에서 Option Base 1을 선언하면 하위 첨자는 0이며, 모든 배열에 대해 기본 하위 첨자는 1이됩니다.
결론
이 튜토리얼에서는 VBA에서 배열이 어떻게 사용되는지 배웠고 배열이 일반 변수와 어떻게 다른지 살펴 보았습니다. 예제를 통해 1 차원 및 2 차원 배열을 탐색했습니다. 또한 고정 및 동적 배열에 대해서도 논의했습니다.
런타임 중에 배열의 크기를 조정하고 redim preserve를 사용하여 값을 보존하는 방법은 예제와 함께 논의되었습니다. 마지막으로 여러 작업을 수행하는 데 도움이되는 배열 방법을 배웠습니다.
=> 여기에서 모든 VBA 자습서 확인