UNION (5)
엑셀 VBA #51 / 중복데이터 처리_4 [VBA] - 사용자정의함수
반응형

엑셀 VBA #51 / 중복데이터 처리_4 [VBA] - 사용자정의함수

Sub 중복데이터삭제_단계2()

Dim rng As Range, rngX As Range
Dim i As Long, j As Long
Dim cntR As Long, cntC As Long
Dim strI As String, strJ As String

Set rng = Range("A3", Cells(Rows.Count, "D").End(xlUp))

cntR = rng.Rows.Count
cntC = rng.Columns.Count

For i = 1 To cntR - 1
      strI = fnMerge(rng, i)
      For j = i + 1 To cntR
                   strJ = fnMerge(rng, j)
                   If strI = strJ Then
                                  If rngX Is Nothing Then
                                       Set rngX = rng(j, "A").Resize(1, cntC)
                                  Else
                                       Set rngX = Union(rngX, rng(j, "A").Resize(1, cntC))
                                  End If
                   End If
       Next
Next

If rngX Is Nothing = 0 Then rngX.Delete
End Sub

Function fnMerge(rng As Range, i As Long) As String
Dim col As Long, k As Long
Dim str As String

col = rng.Columns.Count
    For k = 1 To col
        str = str & rng(i, k)                        '?????이해 안됨
    Next
 fnMerge = str
End Function

vba#51.xlsm
0.02MB


https://www.youtube.com/watch?v=EkGRLek1arM&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=51

 


엑셀 VBA #34 / 사용자정의 함수 [VBA]

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



 

 

반응형
  Comments,     Trackbacks
엑셀 VBA #50 / 중복데이터 처리_3 [VBA]-Union
반응형

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

 


Sub 중복데이타삭제_단계1()

Dim rng As Range
Dim lR As Long, lC As Long
Dim i As Long, j As Long
Dim rngX As Range

Set rng = Range("A3", Cells(Rows.Count, "D").End(xlUp))

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

rng(1, lC + 1).Resize(rng.Rows.Count, 1) = "=A3&B3&C3&D3"

For i = 3 To lR - 1
    For j = i + 1 To lR
        If Cells(i, "E") = Cells(j, "E") Then
            If rngX Is Nothing Then
                Set rngX = Cells(j, "A").Resize(1, lC + 1)
            Else
                Set rngX = Union(rngX, Cells(j, "A").Resize(1, lC + 1))
            End If
        End If
    Next
Next

If rngX Is Nothing = 0 Then rngX.Delete
Columns("e") = ""

End Sub

결과값

 

vba#50.xlsm
0.02MB

https://www.youtube.com/watch?v=i1vBAAKTBhY&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=50

 


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

 

엑셀 VBA #08 / 셀 범위 선택하기_3 [VBA] - Union



 

 

반응형
  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 #13 / 셀 범위 선택하기_8 [VBA] - Intersect
반응형


엑셀 VBA #13 / 셀 범위 선택하기_8 [VBA] - Intersect

목적 : Intersect를 활용하여 범위간의 교집합 셀 선택하기

1. Intersect
구조 : Application.Intersect(범위1,범위2,,,,,,범위30)
          Application생략 가능
의미 : 교집합 셀 선택(최대 30개)

2. 사용
Intersect(Range("A1:D10"),Range("C4:E12")).Select

3. 심화
만약 범위간 교집합이 없을 때, 위와 같이 단독구문으로 하면 프로시져가 멈추게 된다. 이를 해결하기 위해 아래처럼 구문을 작성하면 된다.
If Not Intersect(Range("A1:D10"),Range("C4:E12")) Is Nothing Then
~~~~~~~~ '교집합이 있으면 이곳에 실행할 코드 입력
End IF

4. 참고
합집합을 구하는 함수 : Union
Union(Range("A1:D10"),Range("C4:E12")).Select


https://www.youtube.com/watch?v=C0CtxRTnqz4&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=13

반응형
  Comments,     Trackbacks
엑셀 VBA #08 / 셀 범위 선택하기_3 [VBA] - Union
반응형

엑셀 VBA #08 / 셀 범위 선택하기_3 [VBA]
 
목적 : Union을 활용하여 비연속적으로 떨어진 셀 범위 선택하기(합집합)

1. Union
구조 : Application.Union(범위1,범위2,,,,,,범위30)
          Application생략 가능
의미 : 비연속적으로 떨어진 셀 범위(최대 30개)를 합체

2. 사용
Application.Union(Columns("B"),Columns("D")).Select      또는
Union(Columns("B"),Columns("D")).Select


3. 심화

특정값(ex, 4 또는 6)을 제외한 셀을 선택하는 경우, Union활용

 

Dim c as Range
Dim r as Range

For Each c in Range("A1:A10")
    If c = 4 or c = 6 then
    Else                          'c의 값이 4 또는 6이 아니라면
           If r Is Nothing Then   ' r이라는 개체변수(r방)에 아무것도 없으면
               Set r =c                      'r방에 c값을 넣어주고
           Else                           'r방에 기존 값이 있으면
               Set r =Union(r,c)        ' r방에 기존 값과 c값을 합체한다
           End if
    End If
Next

If r is nothing = 0 then r.Select       '0=false, r방이 nothing이 아니라면(false), r을 선택해라

 

For Each~Next구문 이해도

 

vba#08.xlsm
0.02MB

 

https://www.youtube.com/watch?v=w3fWBhtPamA&t=15s

 

 

2023.12.13 - 엑셀 VBA #13 / 셀 범위 선택하기_8 [VBA] - Intersect

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

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

2023.12.16 - 엑셀 VBA #51 / 중복데이터 처리_4 [VBA] - 사용자정의함수

 

 

 

반응형
  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