본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #62 [ 홀수_짝수차 구별하기 ]

by 일등미노왕국 2023. 9. 18.

더보기
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim rngU As Range
    Dim rngAll As Range: Set rngAll = [e7].CurrentRegion
    
    Set rngAll = rngAll.Offset(1, 1).Resize(rngAll.Rows.Count - 1, rngAll.Columns.Count - 1)  '= 차수별 데이터
    
    If Intersect(rngAll, Target) Is Nothing Then Exit Sub    '= 차수별 데이터를 클릭하지 않으면 종료
        rngAll.Interior.ColorIndex = xlNone                  '= 색상 초기화
        rngAll.Font.Bold = False                             '= Bold 초기화
    
    Set rngU = Intersect(rngAll, Union(Target.EntireRow, Target.EntireColumn))      '= 타겟의 가로 세로 영역을 설정
    
        rngU.Interior.ColorIndex = 6                         '= 노란색상
        rngU.Font.Bold = True                                '= Bold 설정
    
End Sub

Sub 기초방62()

    Dim str$
    Dim rngAll As Range: Set rngAll = [e7].CurrentRegion
    Dim rngA As Range
    
    Set rngAll = rngAll.Offset(1, 1).Resize(rngAll.Rows.Count - 1, rngAll.Columns.Count - 1)
    
    str = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text   '= Caller를 통해서 매크로 버튼의 텍스트를 가져온다
   
    Application.EnableEvents = False                           '= 이벤트 동작 일시정지
        If str = "전체" Then
        
           rngAll.Columns.Hidden = False                       '= 숨김 해제
        
        ElseIf str = "홀수차" Then
        
            rngAll.Columns.Hidden = False
            odd_even rngAll, str
        
        ElseIf str = "짝수차" Then
        
            rngAll.Columns.Hidden = False
            odd_even rngAll, str
        
        End If
    
    Application.EnableEvents = True                           '= 이벤트 동작 재 설정
    
End Sub

Sub odd_even(rngAll As Range, str$)

    Dim rngA As Range
    Dim i&
    
    i = IIf(str = "짝수차", 0, 1)                              '= 짝수차에 0 / 홀수차에 1
    
    For Each rngA In rngAll.Columns
      
        If (rngA.Column + 1) Mod 2 <> i Then                  '= 버튼의 홀수 짝수 여부로
        
            rngA.Hidden = True                                '= 열의 숨김 여부를 결정
        End If
    Next rngA

End Sub

 

이번 문제의 가장 핵심은

62번 문제

str = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text

Application.Caller의 사용법을 알고 있는지...

 

62_1번 문제

Set rngU = Intersect(rngAll, Union(Target.EntireRow, Target.EntireColumn))

이 교집합을 통한 rngU를 구할수 있는지....

 

 

저 핵심구문을 알고 있는지 없는지의 문제였다.

도움이 되었길 바란다.

 

기초방62.xlsm
0.02MB

댓글