표에서 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
성실한 납세자가 되기 위해서라도 이번 문제는 꼭 풀어보자...
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #29 [ 폰트처리하기 ] (0) | 2023.02.07 |
---|---|
[기초방] VBA 100제 #28 [ 그룹 통합하기 ] (0) | 2023.02.05 |
[기초방] VBA 100제 #26_1 [ 그룹별 목차 만들기 ] (0) | 2023.02.05 |
[기초방] VBA 100제 #26 [ 그룹별 시트 만들기 ] (0) | 2023.02.03 |
[기초방] VBA 100제 #25 [ 병합셀 다루기 ] (0) | 2023.02.02 |
댓글