You are on page 1of 3

Private Sub Worksheet_Change(ByVal Target As Range)

Dim cell As Range


Dim Gcell As Range
Dim Hcell As Range
Dim SumG As Double
Dim SumH As Double
Dim LastRowG As Long
Dim LastRowH As Long
Dim LastRow As Long
Dim Count As Long
Dim MergeSize As Long
Dim CountGreenCells As Long
Dim SelectedColumn As Integer
Dim GreenColor As Long
Dim Total As Long, Completed As Long, Percentage As Double
Dim SumValue As Long
Dim ValueCell As Range

' 이벤트 일시 중단
Application.EnableEvents = False

' RGB 값
GreenColor = RGB(0, 176, 80)

' G 열에서 변경이 발생했는지 확인


If Not Intersect(Target, Me.Range("G:G")) Is Nothing Then
' G 열의 마지막 행을 찾기
LastRowG = Me.Cells(Me.Rows.Count, "G").End(xlUp).Row - 2

' G 열에서 배경색이 (221,235,247)이 아니면서 값이 숫자일 경우 합산


For Each Gcell In Me.Range("G1:G" & LastRowG)
If Gcell.Interior.Color <> RGB(221, 235, 247) And
IsNumeric(Gcell.Value) Then
SumG = SumG + Gcell.Value
End If
Next Gcell

' '인원값' 이름의 셀에 합산된 값을 업데이트


ThisWorkbook.Names("인원값").RefersToRange.Value = SumG
End If

' H 열에서 변경이 발생했는지 확인


If Not Intersect(Target, Me.Range("H:H")) Is Nothing Then
' H 열의 마지막 행을 찾기
LastRowH = Me.Cells(Me.Rows.Count, "H").End(xlUp).Row - 2

' H 열에서 배경색이 (221,235,247)이 아니면서 값이 숫자일 경우 합산


For Each Hcell In Me.Range("H1:H" & LastRowH)
If Hcell.Interior.Color <> RGB(221, 235, 247) And
IsNumeric(Hcell.Value) Then
SumH = SumH + Hcell.Value
End If
Next Hcell

' '보고서값' 이름의 셀에 합산된 값을 업데이트


ThisWorkbook.Names("보고값").RefersToRange.Value = SumH
End If

' C 열에서 변경이 발생했는지 확인


If Not Intersect(Target, Me.Range("C:C")) Is Nothing Then
' 이벤트 일시 중단
Application.EnableEvents = False

' C11 부터 시작
Count = 1

' C11 부터 마지막 행까지 숫자 증가


LastRow = Me.Cells(Me.Rows.Count, 3).End(xlUp).Row
For Each cell In Me.Range("C11:C" & LastRow)
If cell.MergeCells Then
' 병합된 셀의 크기 확인
MergeSize = cell.MergeArea.Rows.Count

' 병합된 셀의 첫 번째 셀에만 입력


If cell.MergeArea.Cells(1, 1).Address = cell.Address Then
cell.Value = Count
Count = Count + 1
End If

' 병합된 셀의 크기만큼 건너뛰기


For i = 1 To MergeSize - 1
Set cell = cell.Offset(1, 0)
Next i
Else
cell.Value = Count
Count = Count + 1
End If
Next cell

' B8 에 값을 작성
Me.Cells(8, 2).Value = Count - 1

' 이벤트 다시 활성화


Application.EnableEvents = True
End If

' 월값이 변경되거나 월값에 따른 열의 값이 변경되었는지 확인


If Not Intersect(Target, Me.Range("월값")) Is Nothing Or Target.Column = 13 +
Me.Range("월값").Value Then
SelectedColumn = 13 + Me.Range("월값").Value

' 선택된 열에서 RGB 값 개수를 계산


CountGreenCells = 0

' 초기화
SumValue = 0
For Each cell In Me.Range(Me.Cells(11, SelectedColumn), Me.Cells(394,
SelectedColumn))
Set ValueCell = Me.Cells(cell.Row, 8)
If ValueCell.MergeCells Then
Set ValueCell = ValueCell.MergeArea.Cells(1, 1)
End If

If Me.Cells(cell.Row, 4).MergeCells Then


If InStr(Me.Cells(cell.Row, 4).MergeArea.Cells(1, 1).Value, " - ")
= 0 Then
If (cell.Interior.Color = GreenColor Or cell.Interior.Color =
RGB(255, 255, 255)) And IsNumeric(ValueCell.Value) Then
CountGreenCells = CountGreenCells + 1
SumValue = SumValue + ValueCell.Value
End If
End If
Else
If InStr(Me.Cells(cell.Row, 4).Value, " - ") = 0 Then
If (cell.Interior.Color = GreenColor Or cell.Interior.Color =
RGB(255, 255, 255)) And IsNumeric(ValueCell.Value) Then
CountGreenCells = CountGreenCells + 1
SumValue = SumValue + ValueCell.Value
End If
End If
End If
Next cell

Me.Range("결과값").Value = CountGreenCells
Me.Range("보고서값").Value = SumValue
End If

' 퍼센티지 계산 및 M 열 마지막 셀에 입력


Total = Me.Cells(8, 2).Value
Completed = Me.Range("결과값").Value

If Total <> 0 Then


Percentage = (Completed / Total) * 100
Me.Cells(Me.Cells(Me.Rows.Count, 13).End(xlUp).Row, 13).Value =
Format(Percentage, "0.00") & "%"
End If

' 이벤트 다시 활성화


Application.EnableEvents = True
End Sub

You might also like