重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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
っていう風にはできないのでしょうか?
知恵をおかしください

A 回答 (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
'-------------------------------------------
    • good
    • 0

こんな感じかな?



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」で
尚且つ、その条件を満たしていれば
セルをロックする
これを抽出したすべてのセルに対し処理を行う
シートの保護設定
以上

しかし、条件付き書式の処理を含むコードは難しいので
コードで処理する方法を模索した方が良いと思います
参考まで
    • good
    • 0

すいません。



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

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 ' シートの保護解除

これでいいはずです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!