2012年12月4日火曜日

Excel 2010:条件付き書式コピペの弊害

以前にも困ったことがあったのですが最近また遭遇したので。

下図のシートでは表のC列部分に条件付き書式が設定されています。適用先はC2からC6です。


表に1行足して書式を上の行からコピーすると、条件付き書式の適用先はC7となります。元のルールの適用先が拡張されるわけではありません。


これがネックです。適用先が異なるため、新規に作成された別のルールとして認識されるからです。
7行目を切り取って4行目に挿入してみます。ルールの適用先はC4に変化します。


すると元のルールの適用先は、連続した一つの範囲だったのがC4を飛ばした二つの範囲に分割されてしまいます。


後から編集する時にわかりづらいです。そこで再び連続した一つの範囲になるように修正したとします。


全体の数式や書式を変えようという場面であれば、コピペでこれをやってしまうでしょう。
ところがこうすると先の4行目では、適用先がC4のルールとC2からC7のルールとが重複する形になります。別のルールとして認識されているので当然ですが。


マイクロソフトはこれを仕様であるとしています。

Excel 2007 条件付き書式をコピーした場合、以前より条件付き書式が増加する - Microsoftサポート

2003以前の感覚だと上のような書式のコピペはふつうにやっていたと思います。実用的に考えて、どうにかならなかったんでしょうか。ちなみに2013 Previewでもこの挙動は変わりませんでした。

ルールの重複が累積するとファイルサイズは目に見えて大きくなります。実際、条件付き書式を使って作りこまれたファイルで困っています。
いろいろ考えたのですが、結局VBAでルールをリフレッシュするしかないのかなという結論になりました。

Dim fc As FormatCondition

     With Range("C2:C7")
         .FormatConditions.Delete
         Set fc = .FormatConditions.Add(Type:=xlCellValue, Operator:=xlGreaterEqual, _
             Formula1:="=300")
         fc.Font.ColorIndex = 3
         fc.Interior.ColorIndex = 6
     End With

しかし複数のルールがいろいろ設定されていたら一々コードを作るのも面倒です。全ルールを自動で照合するような汎用コードも作れないことはないでしょうが・・・
こんな仕様なら、いっそコピペでは条件付き書式が貼り付けられないようにしてほしいなと思います。

2 件のコメント:

匿名 さんのコメント...

汎用コードを作ってみましたが、処理に時間がかかります。

bardiel さんのコメント...

自分もちょっと試したのですがModifyAppliesToRangeでなぜかクラッシュしてしまいました^^;
またそのうち調べてみたいです。

コメントを投稿