Excel - 색상을 기준으로 셀을 잠그시겠습니까?

Excel - 색상을 기준으로 셀을 잠그시겠습니까?

일부 셀의 서식 지정 및 편집을 보호하려는 Excel 시트가 있습니다. 이 모든 셀은 특정 색상으로 채색됩니다.

시트가 매우 크기 때문에 이러한 모든 셀을 한 번에 잠근 다음 잠그려는 셀을 변경하지 않고 다른 모든 셀을 대량 포맷할 수 있는 방법을 찾고 있습니다.

특정 색상으로 셀을 잠그도록 Excel에 지시하는 방법이 있습니까?

답변1

예, VBa를 사용합니다... Visual Basic 화면의 "ThisWorkbook"에 복사한 다음 실행하세요(녹색 재생 삼각형).

여기에 이미지 설명을 입력하세요

Sub WalkThePlank()

    dim colorIndex as Integer
    colorIndex = 3                   'UPDATE ME TO YOUR COLOUR OR BE FED TO THE SHARKS   

    Dim rng As Range

    For Each rng In ActiveSheet.UsedRange.Cells

        Dim color As Long
        color = rng.Interior.ColorIndex
        If (color = colorIndex) Then   
            rng.Locked = True
        else
            rng.Locked = false    'this will remove any locks for those not in the given color
        End If

    Next rng

End Sub

VBa에는 실행 취소 기능이 없으므로 먼저 파일 복사본을 만드십시오(백업을 생성하려면)!

컬러 인덱스 -http://dmcritchie.mvps.org/excel/colors.htm

MS Office에 VBA를 어떻게 추가하나요?

위의 내용은 병합된 셀이 없고 워크시트가 보호되지 않는다고 가정합니다.

필요한 colorIndex가 무엇인지 확실하지 않은 경우 먼저 이 스크립트를 사용하십시오.

Sub Find()

Dim colorIndexFinder As Integer
colorIndexFinder = Range("A1").Interior.colorIndex  'CHANGE A1 to the cell with the colour you want to use
MsgBox (colorIndexFinder)

End Sub

편집하다

병합된 셀을 사용한다고 언급하셨습니다.

시도해 보세요

Sub WalkThePlank()

Dim colorIndex As Integer
colorIndex = 3                   'UPDATE ME TO YOUR COLOUR OR BE FED TO THE SHARKS

Dim rng As Range

For Each rng In ActiveSheet.UsedRange.Cells

    Dim color As Long
    color = rng.Interior.colorIndex

    If (color = colorIndex) Then
        If (rng.MergeCells) Then
            rng.MergeArea.Locked = True
        Else
            rng.Locked = True
        End If
    Else
        If (rng.MergeCells) Then
            rng.MergeArea.Locked = False
        Else
            rng.Locked = False
        End If
    End If

    Next rng

End Sub

답변2

나는 발견했다이것간단한 매크로를 사용하여 방법:

전체 시트를 선택 (Ctrl+A)하고 모든 셀의 잠금을 해제한 다음 이 매크로를 사용하여 색상이 지정된 셀을 다시 잠그도록 설정합니다.

Dim c As Object 
For Each c In selection 
    If c.ColorIndex = 6 ' 6 is for Yellow - change to the colour you want
    c.Locked = True 
End If 
Next c 

답변3

Vba 솔루션(MS Office에 VBA를 어떻게 추가하나요?)

Sub LockOnlyCellsWithCertainColor()
    'Change to your color
    Const colorToLock = 65535

    Dim currentCell As Range

    ActiveSheet.Cells.Locked = False

    For Each currentCell In ActiveSheet.UsedRange.Cells
        If currentCell.Interior.Color = colorToLock Then
            If currentCell.MergeCells Then
                currentCell.MergeArea.Locked = True
            Else
                currentCell.Locked = True
            End If
        End If
    Next

End Sub

Sub GetBackgroundColorOfActiveCell()
    Debug.Print ActiveCell.Interior.Color
    MsgBox ActiveCell.Interior.Color
End Sub

답변4

아래는 시트 보호를 먼저 해제하는 한 저에게 효과적입니다. 색상 인덱스는 노란색의 경우 6으로 설정됩니다.

Sub Lock_by_Color()
Dim colorIndex As Integer
Dim Range As Range

colorIndex = 6
For Each Range In ActiveSheet.UsedRange.Cells
Dim color As Long
 color = Range.Interior.colorIndex
If (color = colorIndex) Then
 Range.Locked = True
Else
 Range.Locked = False
End If
Next Range

ActiveSheet.Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
ActiveSheet.EnableSelection = xlNoRestrictions
End Sub

관련 정보