
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件)
- 最新から表示
- 回答順に表示
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
'-------------------------------------------
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.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 ' シートの保護解除
これでいいはずです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
マクロ自動コピペ 貼り付ける場...
-
Excel 日付を比較したら、同じ...
-
Office2021を別のPCにインスト...
-
エクセルで質問です。 ハイパー...
-
Microsoft365、ページ設定がで...
-
エクセルやパワポファイルの保...
-
【Excel VBA】PDFを作成して,...
-
エクセル 同じ数字を他の列に自...
-
Office 2021 Professional Plus...
-
outlookのメールが固まってしま...
-
役所でもらった書類をエクセル...
-
Microsoft365搭載Windows11PCへ...
-
Microsoft Formsの「個人情報や...
-
office365って抵抗感ないですか?
-
パソコンWindows11 Office2021...
-
エクセルからメールを作れるか...
-
Excelで〇のついたものを抽出し...
-
Teams内でショートカットって貼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
Office2021を別のPCにインスト...
-
エクセル 同じ数字を他の列に自...
-
エクセルからメールを作れるか...
-
Microsoft365、ページ設定がで...
-
快活CLUBについて 私用で使う書...
-
パソコンWindows11 Office2021...
-
libreoffice calcで行を挿入し...
-
エクセルで質問です。 ハイパー...
-
outlookのメールが固まってしま...
-
Microsoft Formsの「個人情報や...
-
別シートの年間行事表をカレン...
-
Microsoft Formsでクイズの解答...
-
マクロ自動コピペ 貼り付ける場...
-
Excelで〇のついたものを抽出し...
-
Excel 日付を比較したら、同じ...
-
エクセルで特定のセルの値を別...
-
Officeを開くたびの「再起動メ...
-
office2019 のoutlookは2025年1...
おすすめ情報