プロが教えるわが家の防犯対策術!

こんにちは。
諸事情がありVBAで条件付き書式を設定したく現在奮闘中です。
色々なサイトを見ながらやってみたものの思うように動きませんでした…

やりたいことは例として、
A3:A500に重複する値がある場合フォントを太字の赤にします。
それを各列同様に設定(B列はB3:B500、CはC3:C500…という感じです)といった感じです。
尚、各列ともに重複が無くなった場合は元の書式に戻るといった内容です。

どなたかご教示いただけますと幸いです。
宜しくお願いいたします。

(当方:WIN10 Excel2019)

A 回答 (3件)

>諸事情がありVBAで条件付き書式を設定したく・・・


という諸事情はなんでしょうか
一般的にはVBAを使う場合であっても、条件付き書式を予め設定しておけば足りるケースが多いのではないかと推測します。

但し、条件付き書式の設定範囲をデーリートする事情があり、再設定するとか、全く新しいブックやシートを追加して、そこに条件付き書式を設定する必要があるという場合は、VBAで条件付き書式を設定することになると思います。

No.1さんの回答はいわゆる「①数式を使用して、書式設定するセルを決定」という方法だと思います。
これとは別に、条件付き書式設定には「②一意の値または重複する値だけを書式設定」という機能もあります。

設定範囲はNo.1さんの回答と同じだとして①の方法だと、一つの条件付き書式の設定で、A3:C500の範囲に対し、「列毎に重複を判定するという数式」を用いればよいわけですが、②の方法だと、列毎に範囲内の重複を判定するという条件と書式が一対ですので、3つの条件付き書式を設定する必要が生じます。このため、VBAが長くなってしまいますが、その機能を使用した例は以下のようなものです。

Dim i As Long
With Range("A3:A500") 'A列の範囲
With .FormatConditions
.AddUniqueValues
.Item(.Count).SetFirstPriority
.Item(1).DupeUnique = 1
.Item(1).Font.Bold = True
.Item(1).Font.Color = vbRed
.Item(1).StopIfTrue = False
End With
.Copy
For i = 2 To 3 'B列~C列まで
Cells(3, i).PasteSpecial Paste:=xlPasteFormats
Next
Application.CutCopyMode = False
End With
End Sub

もし、C列(3列目)以降の列も同様の書式にする場合は
i=2 to 3の部分の3を最終列の番号にすることで対応願います。
    • good
    • 0
この回答へのお礼

お礼が遅れ大変失礼しました…
ご回答ありがとうございました!
少し考えている内容とは違うんですが、
一番近い内容でしたのでベストアンサーとさせていただきます!

お礼日時:2023/07/31 18:26

No.2です。


VBAのコードを回答欄に貼付けするとき、1行目が欠落したようです。
Sub sample()
のような名前を頭につけてください。
    • good
    • 0

こんばんは



固定範囲での条件付き書式の設定なので、「マクロの記録」を利用すれば、そのまま使えるものが得られますよ。


以下は、ご参考までに。
※ 対象とするのは、A列、B列、C列で良いものと解釈しました。

Sub test()
Const f = "=COUNTIF(A$3:A$500,A3)>1"

With Range("A3:C500").FormatConditions
.Add Type:=xlExpression, Formula1:=f
.Item(.Count).SetFirstPriority
.Item(1).Font.Bold = True
.Item(1).Font.Color = vbRed
.Item(1).StopIfTrue = False
End With
End Sub
    • good
    • 0
この回答へのお礼

お礼が遅れ大変失礼しました…
ご回答ありがとうございました!
参考にさせていただきます!

お礼日時:2023/07/31 18:25

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