• 締切済み

VBAを使って条件付書式のセルを保護したい

VBAを使って =A2<>0の条件付書式の入ったセルが 黒塗りのときをロックしたいと思い セルの状態を調べたいのですが FormatConditionsを使えばいいのかと想うのですが 使い方がイマイチわかりません。 たとえば 黒で塗りつぶしたセルを探そうと想ったときは locked_col = RGB(0, 0, 0) cell_col = Worksheets("Sheet1").Cells(j, i).Interior.Color 'セルが黒塗りの場合ロックする If Not cell_col = locked_col Then Cells(j, i).Locked = False End If っていう風にはできないのでしょうか? 知恵をおかしください

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 一応、想像の範囲ですが、条件付き書式そのものの中から探し出すよりも、そのVBA自体で処理してしまったほうが早いのではありませんか? =A2<>0の条件付書式 というのは、A列から、0でないものを探して、そのセルをロックするという方式で良いのでは? (言葉だけで書くと、理解しない方も多いようですから、コードをサンプルコードを入れておきます。) 条件付き書式自体は、黒にしてくれているのだと思います。ただ、それ自体は無視して、条件付き書式を設定したところから、条件に合うものを選び出して、Locked プロパティをTrue にするということです。イベントドリブン型にしたいところですが、シートの保護との組み合わせは、できなかったと思います。 なお、条件付き書式の色は、Range プロパティのInterior では取れません。 '------------------------------------------- Sub TestMacro1()   Dim rng As Range   Dim ur As Range   Dim c As Variant   '保護解除   ActiveSheet.Unprotect   ActiveSheet.UsedRange.Locked = False   On Error Resume Next   'A列のみ   Set rng = Columns(1).SpecialCells(xlCellTypeAllFormatConditions)   On Error GoTo 0   For Each c In rng     '自セルが0でないという条件     If c.Value <> 0 Then       If ur Is Nothing Then         Set ur = c       Else         Set ur = Union(c, ur)       End If     End If   Next c   If Not ur Is Nothing Then     ur.Locked = True   End If   '保護開始   ActiveSheet.Protect End Sub '-------------------------------------------

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

こんな感じかな? Sub test() Dim Rng As Range ActiveSheet.Unprotect For Each Rng In Cells.SpecialCells(xlCellTypeAllFormatConditions) If Rng.FormatConditions(1).Formula1 = "=$A$2<>0" _ And Evaluate(Rng.FormatConditions(1).Formula1) Then Rng.Locked = True End If Next Rng ActiveSheet.Protect End Sub 詳細が曖昧なので希望とは違うかもしれませんが 簡単な説明 シートのロック解除 条件付き書式の設定が有るセルを抽出し その中で、条件の1が「=$A$2<>0」で 尚且つ、その条件を満たしていれば セルをロックする これを抽出したすべてのセルに対し処理を行う シートの保護設定 以上 しかし、条件付き書式の処理を含むコードは難しいので コードで処理する方法を模索した方が良いと思います 参考まで

回答No.2

すいません。 質問を読み直したら、 見当違いの回答をしてしまったみたいです。

回答No.1

Worksheets(ActiveSheet.Name).Unprotect ' シートの保護解除 For i = 1 To 10 For j = 1 To 10 locked_col = RGB(0, 0, 0) cell_col = Worksheets("Sheet1").Cells(j, i).Interior.Color 'セルが黒塗りの場合ロックする If cell_col = locked_col Then Cells(j, i).Locked = True Else Cells(j, i).Locked = False End If Next j, i Worksheets(ActiveSheet.Name).Protect ' シートの保護解除 これでいいはずです。