본문 바로가기

IT/엑셀(Excel)

[Excel-VBA] 저장시 Cell 값에 따른 Row 색상 변경

반응형

VBA 사용시 개인적으로 많이 사용하는 이벤트가 저장시 값을 확인해서 색상 변경 하는 것이다.

일단 전에 사용한 Excel 파일을 사용하려 한다.

2021/01/13 - [IT/엑셀(Excel)] - [Excel-VBA] 입력 받은 값으로 라인 선택하기

 

[Excel-VBA] 입력 받은 값으로 라인 선택하기

Excel 로 데이터를 분석 시 자주 사용하는 기능으로 라인 찾는 Funtion을 만들어 보려 한다. 일단 Excel 을 시작하고 아래와 같이 가상 데이터를 만들어 본다. 그리고 파일을 확장자 xlsm으로 저장 한다

blissfuljoon.tistory.com

Visual Basic 을 실행하고 현재_통합_문서를 선택 한다.

Woorkbook 을 선택하고 이벤틀르 BeforeSave 선택한다.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    'Worksheet 선택
    Dim wks As Worksheet
    Set wks = Sheets("Sheet1")
    
    Dim i, j As Integer ' for 문에 사용
    Dim lastRow, lastCol As Integer '마지막 Row / column index
    lastRow = wks.Range("A" & wks.Rows.Count).End(xlUp).Row 'Sheet 마지막 Row
    lastCol = wks.Cells(1, Columns.Count).End(xlToLeft).Column 'Sheet 마지막 Column
    
    Dim findIndex As Integer  '찾을 헤더의 위치
    
    Dim findColumnName As String  '찾을 헤더 문구
    findColumnName = "F1"
    
    Dim findString As String '색상 변경할 문구
    findString = "F23"
    
    Dim iColor As Integer 'Row 색상
    iColor = 2
    
    With wks
        For i = 1 To lastRow
            iColor = 2
            ' 첫번째 Row 헤더 일때만 찾는다.
            If i = 1 Then
                For j = 1 To lastCol
                    '헤더(첫번째컬럼) 에 "F1" 을 찾는다.
                    If .Cells(i, j) = findColumnName Then
                        '헤더(첫번째컬럼) 이 "F1" 일 경우 column index 를 저장 한다.
                        findIndex = j
                        Exit For
                    End If
                Next j
            End If
            
            If findIndex = 0 Then
                MsgBox ("찾는 컬럼이 없습니다")
                Exit Sub
            End If
            
            If .Cells(i, findIndex) = findString Then
                iColor = 3
            End If
            
            .Range(Cells(i, 1), Cells(i, lastCol)).Interior.ColorIndex = iColor '해당 라인의 사용 중 컬럼까지 색상
            '.Rows(i).Interior.ColorIndex = iColor  ' 라인 전체 색상
            '.Cells(i, findIndex).Interior.ColorIndex = iColor  ' 해당 컬럼만
        Next i
    End With
End Sub

소스와 결과 sHEET

반응형