반응형
배열의 크기를 아는경우에는 미리 배열 크기를 선언하고 담아도 되지만 담아야 하는 개수가 몇개인지 모를때도 있다.
담아야 하는 배열의 개수를 모를 때 동적으로 배열크기를 조정하면서 1개씩 추가해보겠다.
우선 예제로 데이터를 대충 넣고 100이하의 값만 배열에 담기.
코드는 아래와 같다.
우선 동적배열로 선언하기 위해서는 null array 먼저 선언하고 ReDim 으로 재정의 해줘야 된다.
그런 다음 배열에 추가할 때는 Redim Preserve 로 기존 담겨있는 배열안의 값들을 보존해줘야 한다. 안 그러면 날라감.
배열의 크기를 return 해주는 ubound 를 써서 배열의 크기를 1씩 증가시켜준다.
하지만 ubound 함수를 쓰기위해서는 배열이 null 이면 안 되기 때문에..
나같은 경우는 먼저 arrTest(0) 으로 먼저 크기를 만들어주고 처음 배열에 담기는순가 0 번째 배열이 빈값이면 값을 넣어주는 방식으로 했다.
더 좋은 방식이 있을지도 모른다.ㅎㅎ
Sub ArrayTest()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wb As Workbook, ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Sheets(1)
Dim arrTest() As String '편의상 string..
ReDim arrTest(0)
For i = 1 To ws.Range("a1").CurrentRegion.Rows.Count
If ws.Range("a" & i) <= 100 Then
If arrTest(0) = "" Then '처음 1번째 배열 추가할 때
arrTest(0) = ws.Range("a" & i)
Else '2번째 부터 추가할 때. 배열 크기 1씩 증가하고 담기.
ReDim Preserve arrTest(UBound(arrTest) + 1)
arrTest(UBound(arrTest)) = ws.Range("a" & i)
End If
End If
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
결과를 한번 확인해 보면
잘 들어갔네용
간단한 예제지만 vba array 가 타 언어에 비해 좀 까다로운 점이 있어서 작성해 보았다.
아래는 예제파일.
반응형
'[VBA]' 카테고리의 다른 글
[VBA] Array.Contain(특정 값이 배열안에 있는지 확인) (0) | 2024.04.03 |
---|---|
[VBA]엑셀 다중 콤보박스(Excel Multi Select Combo Box) (4) | 2023.12.22 |
[VBA] 엑셀범위 그림파일로 저장(Range to jpg) (0) | 2023.08.03 |
[VBA] VBA 정규식 사용하기 (0) | 2022.08.24 |
[VBA] vba string.format, printf 기능 (0) | 2022.06.04 |