본문 바로가기
VBA

[VBA] VBA에는 없는 차집합 여집합 구성

by 일등미노왕국 2022. 4. 12.

우리가 많이 사용하는 Union과 Intersect를 사용하면서 혹시 그런 생각을 갖을적은 없는가??

차집합과 여집합은 어떻게 표현하는 함수는 없을까???? 어....없어

 

없다고 하니 만들어 보자...

A영역과 B영역이 있다고 하자

그들사이에 교집합 영역이 있다고 하면 교집합 영역을 어떤식으로 제거 해주냐에 따라 여집합과 차집합을 구할 수 있다.  여기만 생각해 놓고 혹시나 For 문으로 영역의 색상 값을 읽어서 A,B 영역과 교집합을 구분지으려고 했다면 

Specialcells를 공부해 보길 바란다.

굳이 포문을 안태워도 값의 있고 없음을 각각의 셀이 아닌 전체 영역으로 한번에 값을 읽어오기 때문에 코드를 다이어트 할 수 있다. 교집합에 값을 넣고 빼면서 우리가 원하는 집합의 구성을 할 수 있다.

Option Explicit
Sub Haja_집합()

    Dim rngA As Range: Set rngA = [d6:f15]      '= A 집합영역
    Dim rngB As Range: Set rngB = [g6:i15]      '= B 집합영역
    Dim rngM As Range: Set rngM = [f9:g12]      '= A,B 교집합 영역
    Dim rngU As Range                           '= A,B 합집합 영역
    Dim rngYNo&                                 '= 어떤 집합을 선택 yes = 6, no = 7
    
    rngA.Interior.Color = 14348258              '= 기본 인테리어 컬러
    rngB.Interior.Color = 16751052
    rngM.Interior.Color = 14281213
    
    rngYNo = MsgBox("여집합을 구성하시겠습니까", vbYesNoCancel)  '= 어떤 집합을 구성하시겠습니까
    
    If rngYNo = 6 Then                          '= 여집합을 구성한다면
    
        Set rngU = Union(rngA, rngB)            '= A,B 영역을 합쳐라
            rngM = "M"                          '= 교집합 영역에 M자를 출력해라
        Set rngU = Union(rngU, rngM).SpecialCells(4)  '= 합집합과 교집합을 합치는데 공백만 합쳐라
            rngM = ""                           '= 교집합을 비워라
            rngU.Interior.Color = vbRed         '= 여집합의 영역의 인테리어 색상을 변경해라
    
    Else                                        '= 차집합을 구성한다면
    
            rngM = "M"                          '= 교집합에 M을 출력해라
        
        Set rngA = Union(rngA, rngM).SpecialCells(4)  '= A집합 영역과 교집합 영역을 합치는데
                                                      '= 값이 없는 영역 즉 여집합 영역을 A영역으로 다시 설정
            rngM = ""                           '= 교집합을 비우고
                            
        rngB.Interior.Color = xlNone            '= B영역의 인테리어 색상을 초기화 하고
        rngM.Interior.Color = xlNone            '= M영역의 인테리어 색상을 초기화 해라
    
    End If

End Sub

 

혹시 인테리어색상을 알고 싶은데 찾을 수 없던 적이 있다면

인테리어 색상을 선택한 후 [직접실행]창에 다음고 같이 적어보길 바란다.

[  ? selection.interior.color  ]

 

Haja_영역선택하기(22.04.12).xlsm
0.02MB

댓글