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

[기초방] VBA 100제 #27 [ 미납자 확인 ]

by 일등미노왕국 2023. 2. 5.

 

표에서 X로 표시된 곳은 각각의 사람들이 해당월에 미납금액이 있음을 뜻한다.

 

미납된 날을 조합하고 그 미납된 금액을 표기하는데 3만원 이상은 노란색 음영까지 표시 하는 구문이다.

 

최근에는 초기 서식을 입히거나 후기 서식을 입히기 위해서 사용하였던 사용자 함수를  미납금액이 있을 때만 호출하여 이슈를 처리하여 보았다.

 

For Each rngA In rngAll.Rows                                          
    M = Application.CountIf(rngA, "X")                                         

    If M > 0 Then                                                              

       Cells(rngA.Row, "g") = haja_month(rngA)                                
       Cells(rngA.Row, "h") = M & "만원 미납"                                 

       If M >= 3 Then Cells(rngA.Row, 1).Resize(1, 8).Interior.ColorIndex = 6 

    End If
    
Next rngA
Function haja_month(rngA As Range) As String

    Dim rngX As Range
    Dim str$
    
    For Each rngX In rngA.Cells                                                  
    
        If rngX = "X" Then str = IIf(str = "", Cells(5, rngX.Column), str & "," & Cells(5, rngX.Column))
                                                                                  
    Next rngX
    
    haja_month = str                                                              

End Function

사용자 함수에서

If rngX = "X" Then str = IIf(str = "", Cells(5, rngX.Column), str & "," & Cells(5, rngX.Column))

iif라는 내장함수를 좀 더 보도록 하겠다.

 

구문을 풀어보면

If rngX = "X" Then

rngX 가 X이면  즉 미납금이 존재하면

str = IIf(str = "", Cells(5, rngX.Column), str & "," & Cells(5, rngX.Column))

str 변수에 값을 담을 건데, str이 비어있으면 5행, str이 위치한 열의 위치의 값을 str에 담고

str이 비어 있지 않으면, 즉 str 이미 다른 값과 조합이 되어 있다면 이미 조합된 str 값에 5행, str이 위치한 열의 위치의 값을 콤마로 연결하여 조합해라   라는 뜻이다.

 

더보기
Option Explicit

Sub 기초방27()

    Dim rngAll As Range: Set rngAll = Range([b6], [b6].End(2).End(4))               '= 전체 영역
    Dim rngA As Range
    Dim M&
    
    For Each rngA In rngAll.Rows                                                    '= 전체 영역을 행단위로 반복
    
        M = Application.CountIf(rngA, "X")                                          '= 행 단위에서 X의 숫자를 세어서 M에 담아라
        
        If M > 0 Then                                                               '= X 표시 / 즉 미납금액이 있다면
        
           Cells(rngA.Row, "g") = haja_month(rngA)                                  '= haja_month 함수를 호출해라 / rngA 즉 한행 전체를 넘겨라
           Cells(rngA.Row, "h") = M & "만원 미납"                                    '= X의 숫자 / 즉 미납금액을 표기
           
           If M >= 3 Then Cells(rngA.Row, 1).Resize(1, 8).Interior.ColorIndex = 6   '= 미납금액이 3만원이상이면 노란색 음영을 입혀라
           
        End If
    
    Next rngA
    
    Haja_Format (rngAll.Rows.Count + 5)
    
    MsgBox "완료"

End Sub
Function haja_month(rngA As Range) As String

    Dim rngX As Range
    Dim str$
    
    For Each rngX In rngA.Cells                                                     '= 한행에서 각각의 셀들을 순환해라
    
        If rngX = "X" Then str = IIf(str = "", Cells(5, rngX.Column), str & "," & Cells(5, rngX.Column))
                                                                                    '= X를 포함한 셀이 있다면 문자 조합해라
    Next rngX
    
    haja_month = str                                                                '= 조합된 문자가 담긴 str을 haja_month로 반환해라

End Function

Function Haja_Format(R&)

    With Range([g6], Range("h" & R))
    
        .HorizontalAlignment = xlCenter
        .Borders.LineStyle = 1
        
    End With

End Function

성실한 납세자가 되기 위해서라도 이번 문제는 꼭 풀어보자...

 

기초방27.xlsm
0.41MB

댓글