[[20220617180601]] 『条件付き書式の個数が多くフリーズする』(りき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件付き書式の個数が多くフリーズする』(りき)

1人が5行の66列の条件付き書式。
60人分の条件付き書式を設定しようと思ったのですが、
(1人で330の条件付き書式。60人なので60x330=19,800の条件付き書式)
2人目の半分ぐらい(500程)でセルのコピーをしたらカーソルがぐるぐるしExcelが応答なしになってしまいます。

これは条件付き書式の個数が多いからフリーズ?
VBAで設定するしかないのでしょうか?
ご教授お願いいたします。

< 使用 Excel:Excel2013、使用 OS:unknown >


確認ですが、条件付き書式の「ルールの管理」で
そのシートにあるルールの数は何行ありますか?
各シートにあるとするとシートの数は?

ルールの統合ができないかという観点から実態をお聞きしています。
質問だけに終わるかもしれませんが。

(γ) 2022/06/17(金) 19:59


どんな条件か知りませんが
作業セルを使って条件を簡素にしてみては。
(簡単が1番) 2022/06/17(金) 22:44

既に読まれているかもしれませんが、
https://pasokon-labo.com/excel-conditional-format-heavy/
などを参考にして検討してみてください。
(γ) 2022/06/18(土) 07:51

計算を手動にしてコピーしその後F9を押す。
(*) 2022/06/18(土) 09:38

Yさん
お返事遅れました。

=OR(($C7-2)=$AM$1, ($C7-1)=$AM$1,$C7=$AM$1) セル塗りつぶし1
=OR($C4="あ",$C4="い",$C4="う") セル塗りつぶし2
=$C4="え" セル塗りつぶし3
=$C4="お" セル塗りつぶし4

という感じで設定しています。
(りき) 2022/06/21(火) 09:25


それぞれの設定の対象範囲を教えてください。念のため。
(γ) 2022/06/21(火) 09:36

>それぞれの設定の対象範囲を教えてください。念のため。

範囲は当該セルのみです。
(りき) 2022/06/21(火) 14:17


 >範囲は当該セルのみです。
 回答者の質問分かっていますか。
 範囲の意味わかっていますか。
(分からん) 2022/06/21(火) 16:37

 C列自身の値、もしくはC列と[$AM$1]との関係が条件となるのはうかがえますが、
 縦方向の位置関係が分からないですね。

 たとえば「=$C4="お"」の「$C4」の「4」って、何処から見た「4」なのかが重要ですよね? 相対参照なんだから。

 でもまぁ、状況を再現するのにはあんまり関係無いだろうと踏んで、
 ちょっとこちらでも試してみました。

 5行×100列の範囲に、ご提示のルール4つを追加。
 その範囲を含めてメチャクチャな選択範囲をメチャクチャな場所にコピペして
 ルールを増殖していきました。

 400行×150行くらいの範囲で
 Cells.FormatConditions.Countが8000を超えた辺りで
 著しいメモリ消費の増加が現れ、動作が鈍くなってきましたね。

 そんなもんでヘタってしまうものなのか...

(白茶) 2022/06/21(火) 17:02


 で、
 結局この数式だったら、そもそもルール「4つ」で済ませられるんでないの?
 とか思っちゃうんですけど...

 データバーとか、各個人別にルールの適用範囲をグループ分けしないといけない訳でもないだろうし、
 なんでまたわざわざ増殖させるのでしょうね...?

(白茶) 2022/06/21(火) 17:09


 ちょっと私の用語の使い方が適切ではなかったですね。
 「適用先」の範囲を教えてください、と書くべきでした。

 適用先はできるだけ広い、統合したルールにすると効率がよいのではないかと思います。
 また、不必要に行全体とか列全体とかにしないほうがよいでしょう。

 私も実験してみました。
 【(1)非効率的と思われる設定例(極端な例です)】

 下記のレイアウトの  1で示した10000個のセルに
 その値が1のとき、特定の塗りつぶし色をつける条件付き書式を、
 マクロで設定しました。

         A列    B     C     D        999列   
    1      1          1                  1
    2
    3      1          1                  1
 ・・
  999      1          1                  1
 1000

 【参考】
 Sub Macro1()
     Dim r As Range
     Dim j&, k&
     For j = 1 To 40 Step 2
         For k = 1 To 1000 Step 2
             Set r = Cells(j, k)
             r.FormatConditions.Add Type:=xlExpression, Formula1:="=" & r.Address(False, False) & "=1"
             r.FormatConditions(r.FormatConditions.Count).SetFirstPriority
             With r.FormatConditions(1).Interior
                 .PatternColorIndex = xlAutomatic
                 .Color = 49407
                 .TintAndShade = 0
             End With
             r.FormatConditions(1).StopIfTrue = False
         Next
     Next
     Debug.Print ActiveSheet.Cells.FormatConditions.Count
 End Sub

 【(2)統合したルールで設定する例】
 A1:ALL40 の範囲を適用先として、
 =AND(A1=1,MOD(ROW(),2)=1,MOD(COLUMN(),2)=1)
 という条件式で設定します。(該当セルは10,000セル)

 【両者比較」
 ・効果は両方で同じですが、
 ・前者(1)は、動作が緩慢です。そもそも設定に時間がかかりますし、
   設定後も、 例えば、「ルールの管理」でも表示に時間がかかります。
   (待ちきれないので、取り消しました。)
 ・ファイルの大きさも(2)は(1)の1/10程度になります。

 質問者さんのケースは、こう極端なことではないでしょうけど、
 コピー貼り付けを繰り返したりして、類似の状況になっているのではないかと推測します。
 ある程度、大容量のデータであれば、致し方が無い部分もありますが、
 できるだけ効率的なルール設定に気を使われるとよいと思います。

(γ) 2022/06/21(火) 23:16


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.