Excel - 色に基づいてセルをロックしますか?


3

私はフォーマットと編集からいくつかのセルを保護したいこのExcelシートを持っています。これらのセルはすべて特定の色で着色されています。

このシートはとても大きいので、これらすべてのセルを一度にロックして、ロックしたいセルを変更せずに他のすべてのセルを一括フォーマットできる方法を探しています。

特定の色でセルをロックするようにExcelに指示する方法はありますか?

回答:


5

はい、VBaで... Visual Basicの画面で「ThisWorkbook」にこれをコピーして実行します(緑色の三角マーク)。

enter image description here

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

あなたの解決策はおなじみのようです、Dave ^^
duDE

2
それは@duDEです、しかし、私は私の書いた、私はコピーして貼り付けませんでした:)そして私が私の答えを投稿したとき、あなたの答えは見えませんでした、私はあなたの答えをコピーするだけではないことをあなたは保証します!
Dave

2
気にしないで、私は:)私から+1を参照してください!
duDE

1
結合セル@Behedwinを使用していますか?
Dave

1
@Behedwin、今すぐ試して、新しいスクリプトを追加した
Dave

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 

ありがとうございました。しかし、あなたが私がこのマクロを実行する方法を説明することができればそれは素晴らしいことです。私はそれをビジュアルベーシックモジュールにコピー&ペーストするとなぜうまくいかないのかわかりません。それはエラーを出します....
Behedwin

見てください。 excel-easy.com/vba/create-a-macro.html 、それは本当に簡単です、それを試してみてください!
duDE

1

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

0

あなたが最初にシートの保護を解除している限り、下記は私のために働きます、カラーインデックスは黄色のために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

これは3年前のDaveの答えと基本的に同じに見えます。
fixer1234
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.