コピペで増える条件付き書式をVBAで整理する

条件付き書式をコピペするとルールが増えることは回避できない

Excelの条件付き書式は自動で背景色を変えてくれたりする便利な機能ですが、対象セルをコピペすると条件付き書式のルールがどんどん増えて操作が重くなるという問題があります。

残念ながらこれを回避する方法はありません。

ちなみにこの事象についてMicrosoftは以下のページで「仕様だ」と言っています。
https://support.microsoft.com/ja-jp/help/2537195

解決方法は「条件付き書式のルールをクリアして再設定しろ」とあります。

おいおい。

条件付き書式の設定は本当に大変です。

便利な機能ですがその設定は面倒です。

それをやりなおせ、というのはいかがなものかと思います。

仕様だろうがなんだろうが問題があることに変わりはありません。

コピペで増えたルールをVBAで整理は可能

とは言ってもどうにか対応できないものでしょうか。

コピペで増えるのは回避できませんが、増えたルールをVBAで整理する、という方法は可能です。

ここでは条件付き書式で、数式を設定した場合で、条件に =、<>、>、<、>=、<=、のいずれかが設定されている場合に重複を整理するコードを紹介します。

セルの値が「次の値の間」の条件や、「上位」「下位」「平均」などの条件付き書式には対応していません。(自分があまり使わないので)

以下がコードになります。


条件付き書式を整理するVBAコード

ユーザー定義型(構造体)

内部処理で使うための構造体です。

標準モジュールの先頭に書いてください。

関数本体

関数本体は標準モジュールやフォームのどこに書いても大丈夫です。

処理の概要

コードが長いので詳細は省略します。

選択されている列(縦)に条件付き書式のルールの数(コピペで増えた数)がいくつあるのかを確認し、それぞれの重複を削除して適用先を修正します。

列選択されていることが前提になります。

そのため行選択での本VBA処理の実行は挙動未確認です。

利用の際の注意点

複数の列に対して同じルールの条件付き書式を設定する場合がありますが、その場合はその複数列を選択して「条件付き書式の整理()」関数を実行してください。

誤って、同じルールの複数列を選択せずに1列ずつ「条件付き書式の整理()」関数を実行すると適用先(設定範囲)が変わってしまいます。

この場合はUndo(Ctrl + Z)が利きませんので残念ですがブックをいったん閉じてから開きなおしてもらう必要があります。

使い方

条件付き書式を設定している行範囲を選択して、「条件付き書式の整理()」関数を実行します。

条件付き書式のルールが複数ある場合は、そのルールごとに行を選択して「条件付き書式の整理()」関数を実行します。

全列を選択して一度に整理しようかと最初は思ったのですが、(面倒なので)やめました。

以下が使い方の例です。

まず、条件付き書式を設定します。

ここではA列からC列の3列と、D列とE列の2列にそれぞれ設定しています。

次に、2行目をコピーして6行目に貼り付けます。この時点で条件付き書式が2つに分かれます。

重複を整理する列を選択します。

選択は同じ条件付き書式の列をまとめて選択します。

ここではD列とE列の2列を選択します。

条件が異なるA列からC列は選択しません。

あとは「条件付き書式の整理()」関数を実行します。

実行後にルールを確認すると重複が整理されています。

A列からC列も同様に行うことで重複が解消します。

関連記事

サブコンテンツ

このページの先頭へ