행삭제 (3)
엑셀 VBA #41 / 행 삭제_개선2 [VBA] - 배열
반응형

엑셀 VBA #41 / 행 삭제_개선2 [VBA] - 배열

 

Sub 행삭제_배열_myexr231224()

Dim r As Variant   '모든 데이타를 넣을 배열방r....variant적용
Dim a()            '배열방r의 데이타 중 'A-1'이외 값을 넣을 배열방a....동적배열적용
Dim i As Long, j As Long, k As Long

'-----------------------------------------------------
'값을 각 배열방에 넣는 과정
r = Range("A1", Cells(Rows.Count, "B").End(xlUp))
ReDim a(1 To UBound(r, 1), 1 To 2)   
'동적배열의 영역 확정, a는 2차원이므로 a(1차원,2차원)으로 표시해야함
'1차원 크기는 1부터 r의 행 갯수, 2차원 크기는 1부터 2열까지

For i = 1 To UBound(r, 1) ' UBound(r,1)=UBound(1): r배열의  1차원 위치의 최대값까지
      If Cells(i, "A") <> "A-1" Then   'cells(i,"A")의 값이 "A-1"이 아니면
            j = j + 1    'j의 초기값이 지정이 없으므로 지정해야하는데, 
            'j값은 1부터 시작해야 하므로 'j=j+1'코드 설정함
            For k = 1 To 2    '열변호를 확장시킬 변수가 필요함
                  a(j, k) = r(i, k) 'i는 r방에 대응하는 변수이므로,
                  'i를 a방에 대응할 수 없으니 별도의 변수j를 대입함                  
            Next
      End If
Next
'------------------------------------------

'-------------------------------------------
'a방 배열 값을 뿌려주기
Range("A1").CurrentRegion.ClearContents
Range("A1").Resize(UBound(a, 1), 2) = a  
'셀A1을 기준으로 "a배열의 1차원 최대값 및 2차원 최대값"만큼 리사이즈한 영역에 a배열값을 넣어준다.
'-------------------------------------------
End Sub

 



결과값

 

vba#41.xlsm
0.02MB


https://www.youtube.com/watch?v=c7rkH3le9cs&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=41






반응형
  Comments,     Trackbacks
엑셀 VBA #40 / 행 삭제_개선1 [VBA] - Union
반응형

엑셀 VBA #40 / 행 삭제_개선1 [VBA]

Sub 행삭제_union()

Dim r As Range      ' "A-1"값이 포함된 셀의 범위를 담을 변수(방)
Dim i As Long, lR As Long

lR = Cells(Rows.Count, "A").End(xlUp).Row

For i = 2 To lR
      If Cells(i, "A") = "A-1" Then
            If r Is Nothing Then
                  Set r = Cells(i, "A").Resize(, 2)  'r이 range타입이므로 set문으로!
            Else 'r방에 다른 값이 존재한다면
                  Set r = Union(r, Cells(i, "A").Resize(, 2))  
                  'r방에 r방의 기존 값과 
                  새로운 값(Cells(i, "A").Resize(, 2))을  r방에 넣어라
            End If
      End If
Next

If Not r Is Nothing Then r.Delete    '만약 r방에 값이 존재하면 r을 지워라.

End Sub

 


Union메서드를 사용하지 않았을 때는 for문을 통해 한 행씩 삭제> 한 행이 밀려 올라가는 문제 때문에
마지막행를 시작으로 루프를 돌도록 만들었습니다만,
Union 메서드는 조건을 만족하는 영역들을 모아서 한방에 지우므로 "For i = 2 To lR" 사용해도 ok

 

vba#40.xlsm
0.02MB



https://www.youtube.com/watch?v=6jKY3fr01h4&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=40

 


 

union함수 참조

https://raymond.tistory.com/2257

엑셀 VBA #50 / 중복데이터 처리_3 [VBA]

 

반응형
  Comments,     Trackbacks
엑셀 VBA #39 / 행삭제_기본 [VBA]
반응형

엑셀 VBA #39 / 행삭제_기본 [VBA]


Dim i As Long, lR As Long

lR = Cells(Rows.Count, "A").End(xlUp).Row

For i = lR To 2 Step -1

    If Cells(i, "A") = "A-1" Then
        Cells(i, "A").Resize(, 2).Delete
    End If
    
Next



https://www.youtube.com/watch?v=dfJyFc4uelU&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=39


반응형
  Comments,     Trackbacks
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
TODAY TOTAL