こんにちは!Lenocoです。本日も見てくださりありがとうございます。
今回は条件付き書式の書式のみ残す方法を学びましょう!
条件付き書式の書式のみ残す方法
条件付き書式ってとても便利ですけど、場合によっては非常に使いづらいことないでしょうか。
この書式(セル色や文字色)だけ残して、条件付き書式は削除できたらいいのに・・
と思ったことがある人もいるでしょう。。
マクロを使わない方法と、マクロを使う方法と、2種類ご紹介しますね!
これは知っておくと便利!!!
以下のような表を使います。
D列の「個数」に条件付き書式が設定されています。
個数が25以上なら青字太字、個数が10未満なら赤色塗りつぶしを設定しています。
方法①コピーして「クリップボード」から貼り付け
該当範囲をコピーします(今回だとB2セルからE9セル)。
新規シートを開き、左上の「クリップボード」の右側マークをクリックし、
先ほどコピーしたアイテムをクリックします。
「条件付き書式」から「このワークシート」に設定されている条件付き書式を確認し、なにも表示されなければOKです。
条件付き書式はコピーされず、書式のみコピーされました。
方法②マクロで対応
Sub Main()
Dim rng As Range
'条件付き書式が設定されているところは書式のみ残し条件付き書式を削除
For Each rng In ActiveSheet.UsedRange.Cells
' DisplayFomatとFormatを比較して異なっていたらDisplayFomatの色に合わせる
'文字色
If rng.DisplayFormat.Font.Color <> rng.Font.Color Then
rng.Font.Color = rng.DisplayFormat.Font.Color
End If
'太字
If rng.DisplayFormat.Font.Bold <> rng.Font.Bold Then
rng.Font.Bold = rng.DisplayFormat.Font.Bold
End If
'背景色
If rng.DisplayFormat.Interior.Color <> rng.Interior.Color Then
rng.Interior.Color = rng.DisplayFormat.Interior.Color
End If
Next
ActiveSheet.UsedRange.FormatConditions.Delete '条件付き書式を削除
End Sub
コードの説明
まず軽く説明しますね。UsedRangeでそのシートのデータがある全てのセル範囲を取得し、その範囲をすべて1セルずつ見ていき、条件付き書式で設定されているセルがあったら、その書式を実際の書式として設定する、という動きになっています。
そして最後にそのシートの条件付き書式をすべて削除、という流れになります。
では、詳しくコードを見ていきます。
Range型でrngという変数を作成します。
Forで、そのシートで使用されている範囲のすべてのセルをループします。
変数rngは、1つ1つのセルを入れる入れ物として使います。
ここからはすべてやっていることは同じなのですが、
条件付き書式で設定した書式と、実際の書式が一致しているかどうかを確認します。
一致していなかったら実際の書式に、条件付き書式で設定した書式を上書きします。
それを、文字色、太字、背景色で比較し、行っています。
ちなみに太字は「rng.Font.Bold」でTrueを設定することで太字になります。
使用している全セルを確認・設定したあとはForを抜け、
使用しているセル範囲の条件付き書式をすべて削除します。
こちらも、マクロ実行後に「条件付き書式」から「このワークシート」に設定されている条件付き書式を確認し、なにも表示されないことを確認してみてください。
さいごに
ちなみに、①の方法で「マクロの記録」をしてみましたが、一応コードは保存されるのですが、これをまねてもうまくいきませんでした。
②のマクロで、使用しているセル範囲が多い場合は、Application.ScreenUpdatingなどを使用し、
処理が遅くならないよう工夫してみてください。
Lenoco