- 締切済み
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 っていう風にはできないのでしょうか? 知恵をおかしください
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 一応、想像の範囲ですが、条件付き書式そのものの中から探し出すよりも、その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)
こんな感じかな? 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」で 尚且つ、その条件を満たしていれば セルをロックする これを抽出したすべてのセルに対し処理を行う シートの保護設定 以上 しかし、条件付き書式の処理を含むコードは難しいので コードで処理する方法を模索した方が良いと思います 参考まで
- heart1965land
- ベストアンサー率0% (0/1)
すいません。 質問を読み直したら、 見当違いの回答をしてしまったみたいです。
- heart1965land
- ベストアンサー率0% (0/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 ' シートの保護解除 これでいいはずです。