일부 셀의 서식 지정 및 편집을 보호하려는 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
위의 내용은 병합된 셀이 없고 워크시트가 보호되지 않는다고 가정합니다.
필요한 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