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