색칠된 셀의 행 삭제하기

문서를 검토하다 보면 특정 조건에 따라 셀에 색을 칠하는 경우가 많다.
노가다이든, 조건부 서식이든..

그 다음이 문제다.
색 구분 해놓은걸 처리를 해야할 경우,
다시 일일이 선택해서 뭔가를 해야하는 경우가 많다.
대부분의 경우, 선택한걸 삭제하는 경우가 많으므로, 삭제하는 코드로 짯다.

간단하다.

선택 영역 내에서 기본 설정색(마치 흰색으로 보이는 아무것도 없는 색)이 아니면 행을 지우게 해놨다
의외로 유용하다.

  • 단, 조건부 서식에서 설정된 색은 먹히지 않는다!!!!

myimg



Sub row_del_COLOR()

Dim myRNG As Range
Dim i As Integer
Dim CmyRNG As Integer

On Error Resume Next
Application.DisplayAlerts = False
    Set myRNG = Application.InputBox("영역", , , , , , , 8)
Application.DisplayAlerts = True

CmyRNG = myRNG.Count

For i = CmyRNG To 1 Step -1
    If myRNG(i).Interior.ColorIndex <> -4142 Then
    myRNG(i).EntireRow.Select
    Selection.Delete
    End If
Next

On Error Resume Next
Application.DisplayAlerts = False
    myRNG(1).Activate
Application.DisplayAlerts = True

End Sub

[보너스] 짝수값이 들어 있는 셀 색칠하기

특정 영역에서 값이 짝수이면, 회색을 칠하고, 우측셀에 +1 한 값을 넣어본다.
아무 의미는 없다. 어느새 mod 함수를 까먹고 있었다는 사실을 알아냈다.

myimg



Sub range_T()

Dim a As Range
Dim k As Integer

Set a = Range("a1:a10")
For i = 1 To 10
    k = Val(a(i))
        If k Mod 2 = 0 Then
          a(i).Offset(0, 1) = k + 1
          a(i).Interior.Color = RGB(97, 97, 97)
        End If
Next i
End Sub


색칠된 셀의 합계 구하기

특정 조건에 대하여 셀 색을 칠하는 것은 조건부 서식으로 되는데,
색이 칠해진 셀에 대하여, 합계를 구하는 방법이 묘연하다.

배열수식으로 간단하게 만들어질 줄 알았는데, VBA를 사용해야하는 것 같다.
없으면 만들어야지 뭐..

방법

다들 아는 것이겠지만, VBA 프로시저 중, 일반적으로 사용하는 SUB프로시저를 만들기엔 변수가 좀 많다. FUNCTION 프로시저로 UDF를 만들어서 사용하는 게 나을 것 같다.

그래도 뭐가 나을지 모르니, 둘 다 해보자.

CASE #1. SUB 프로시저 사용

영역을 INPUTBOX로 받아서, 색상을 확인한다.흰색이 아니면, 값을 저장해서, 이후에 해당하는 값을 합산한다. 모든 영역에 검사가 끝나면, 최종적으로 합산된 값을 반환한다.

그런데.. 어디다가 반환할 것인가?
셀을 지정해주거나, 현재 셀로 해도 되지만, 뭐.. 일단 아무데나..

작성된 코드는 아래와 같다.
흰색 셀 색상 코드를 확인해서 넣어주는 것이 키포인트

Sub colorSum()

On Error Resume Next
Application.DisplayAlerts = False
    Set 영역 = Application.InputBox("영역을 선택하세요", , , , , , , 8)
Application.DisplayAlerts = True

For i = 1 To 영역.Count
    If 영역(i).Interior.Color <> 16777215 Then
        합계 = 합계 + 영역(i).Value
    End If
Next i

ActiveCell.Value = 합계

End Sub


CASE #2. FUNCTION 프로시저 사용

함수의 인수로 영역을 넣어준다.
나머지 과정은 위와 동일하고, 함수이니, 현재 셀에 반환이 된다.

그런데.. 색상값을 변경해도, 값이 변하지 않기 때문에, 함수가 재계산되지 않는다.
그냥 F9를 누르지.. 머..

작성된 코드는 아래와 같다.

'사용자 함수
Function cSum(rng As Range) As Double
    Application.Volatile
    Set 영역 = rng
    For i = 1 To 영역.Count
        If 영역(i).Interior.Color <> 16777215 Then
            합계 = 합계 + 영역(i).Value
        End If
    Next i
    cSum = 합계
End Function


조건부 서식에서의 색상만 인식했어도 좋았을텐데, 참 아쉽다.

끝.