VBA/배열활용(6)
-
VBA 배열 내에서 날짜비교 최신날짜 가져오기 (MAX 미사용)
엑셀 내 배열에서 날짜를 비교하여 가장 최신 날짜를 뽑아내는 코드 Sub test() Dim m As Workbook Dim ms As Worksheet Set m = Workbooks(ThisWorkbook.Name) Set ms = m.Sheets("Sheet2") Dim v() As Variant Dim r As Integer ReDim v(1 To 1) '임시로 배열 생성 v = Array("2020-04-01", "2020-04-09", "2020-04-02") Dim strResult As String strResult = return_recentDate(v) Debug.Print (strResult) End Sub Function return_recentDate(ByRef v() As Var..
2020.04.13 -
VBA 숫자 정렬, 버블정렬 1탄
소스 Sub GoGo_Bubble() Dim m As Workbook: Dim ms As Worksheet Set m = Workbooks(ThisWorkbook.Name) Set ms = m.Sheets(ActiveSheet.Name) Dim num() As Variant ' //임의 숫자 버블정렬 하기. num() = Array(10, 3, 6, 7, 4, 2, 9, 8, 1) ' //cells에 뿌려보기 For i = 0 To UBound(num) ms.Cells(i + 1, 1) = num(i) Next i ' //Bubble 함수 호출 Call Bubble_Ssun(num()) ' //cells에 뿌려보기 For i = 0 To UBound(num) ms.Cells(i + 1, 2) = num(..
2020.01.08 -
VBA 배열과 Range의 속도차이!
100,000행에 "ㅎㅎ" 라는 글자를 넣는 업무를 한다고 하면! Range를 사용해서 넣었을 때와 배열을 사용해서 넣었을 때의 속도차이를 보겠다. 우선 Range를 사용하여 "ㅎㅎ"라는 글자를 넣는다. Range : 100,000 행에 "ㅎㅎ" 라는 글자 채우기 : 1.63초 [Range 사용] Sub test() Dim m As Workbook: Set m = Workbooks(ThisWorkbook.Name) Dim ms As Worksheet: Set ms = m.Sheets(ActiveSheet.Name) Dim oldTime As Single: oldTime = Timer Dim rng As Range, rn As Range Set rng = ms.Range("A1:A100000")..
2020.01.08 -
VBA Redim Preserve 하다보면 발생하는 오류 '형식이 맞지 않습니다.'
생각으로는 "배열사이즈를 늘리면서 값이 있는 것만 들어가게 해야지!" 했을 때 아래 처럼 생각을 했다. Redim Preserve v(1 to r, 1 to 2) 이런식으로 배열크기를 재 지정하면서 r = r + 1 Row 사이즈를 늘린다. 하지만 이 때 이 렇게 Redim Preserve를 사용했을 때 오류가 발생할 것이다. 왜냐하면 Redim Preserve v(1 to 1, 1 to 1) 사이즈 지정할 때 마지막 차원의 값만 늘릴 수 있다. 즉 v(row, col) 구조라고 하면 row를 늘리면서 사용할 수는 없다는 것이고, col은 늘리면서 preserve를 사용할 수 있다. Dim r as integer, c as integer r = 1: c = 1 ReDim vs(1 To ..
2020.01.08 -
VBA 배열 중복 제거 후 재 할당하기
VBA에서 Collection을 이용한 중복제거 간단한 원리는 중복이 있는 배열을 반복하며 ","를 기준으로 합침 합친 후 Collection 객체를 이용하여 유니크한 항목만 추가 다시 "," 기준으로 분리하여 중복이 제거 된 내용만 배열에 새 할당 1234567891011121314151617181920212223242526Dim varSym As VariantDim vTemp As Variant ReDim vTemp(LBound(varSym, 1) To UBound(varSym, 1)) For i = LBound(varSym) To UBound(varSym) vTemp(i) = varSym(i, 1) & "," & varSym(i, 2) & "," & varSym(i, 3) & "," & varSym..
2018.12.07 -
이미 2행으로 입력 된 배열에 3행 추가 방법
이미 2행으로 입력 된 배열에 redim preserve를 사용해서 3행을 추가 합니다.
2018.12.07