質問

質問者:Unitamu セルの書式数について
困り度:
  • 困っています
Excel2002で、複数ブックからシートをコピーしてきて、ひとつのプックまとめているのですが、途中で「セルの書式が多すぎるため、書式を追加できません。」というメッセージが出てシートをコピーできなくなりました。
調べてみると、セルの書式の組み合わせの上限が約4000であるということがわかりました。

しかし、どのシートがどのくらいのセル書式を消費しているのか不明なため、適切な対応ができません。あるひとつのブックが現在どのくらいのセル書式を使用しているのか知る方法はありませんでしょうか。
==>(理由)特定のひとつのブックだけ極端に多くの書式が使用されているとすると、そのブック(コピー元)のみをチューニングすればよいと思うため。つまりどのブックをチューニングすれば良いかを知りたいのです。
よろしくお願いいたします。
質問投稿日時:08/02/12 13:22
質問番号:3768586
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:noname#52504 ●書式の組み合わせの数を(大雑把に)調べる

以下【書式の組み合わせ】を仮に「パターン」と表記します。

現在のパターン数を直接カウントするのはかなり大変ですが、
パターン数を意図的に増やしていくのは簡単なので、
「パターンをあと幾つ追加できるか」を調べれば、
おおよその数字を出すことができます。

例えば…

1.対象シートを新規ブックにコピーする
2.新規ブックに新規シートを追加する
 以下、新規シートについて、
3.全セルの[表示形式]をユーザー定義して、例えば[mm/dd"honya"]にする
 ※追加するパターンが既存のパターンと重複しないようにするため
4.1〜25列をそれぞれ異なる色で塗り潰す
5.1〜25列を26〜50列にコピーする
6.26〜50列のフォントを太字にする
7.1〜50列を51〜100列にコピーする
8.51〜100列のフォントを斜体にする
 ※この時点でパターン数は約100。
9.1〜40行のフォント色をそれぞれ異なる色に設定していく
 ※1行設定していくごとにパターン数が約100増える

この作業で追加する書式の数は最大で1+25+1+1+40=68ですが、
その組み合わせは、概算で25*2*2*(1+40)=4100になります。

もし、23行目までは設定でき、24行目でエラーが出たとすると、
100+100*23で約2400パターン追加できたことになり、
元あったパターン数はおおよそ1600未満ということになります。

まっさらのシートについて調べると(環境にもよりますが)
39行目でエラーが出ますから、追加数100+100*38=3900で、
元あったパターン数は100未満という結果を得られます。

ただし、複数のブック・シートについて、
その都度手作業で調べるのは、それはそれで大変ですから、
いっそマクロで…。

動作の概要
 アクティブなシートを新規ブックにコピーし、
 新規ブックにパターンを追加していく。
 パターンを追加できなくなった時点で、
 追加できたパターンの数から元の書式の数を逆算して表示する。

'------------------↓ ココカラ ↓------------------
Sub Sample()

 ActiveSheet.Copy
 
 On Error GoTo ErrorHandler
 Application.DisplayAlerts = False
 With ActiveWorkbook.Sheets.Add
  With .Range(.Cells(1, 1), .Cells(50, 100))
   f = 1
   .NumberFormatLocal = """honya"""
   For i = 1 To 50
    .Columns(i).Interior.ColorIndex = i
    .Columns(i + 50).Interior.ColorIndex = i
   Next i
   With .Range(.Cells(1, 51), .Cells(50, 100))
    .Locked = Not .Locked
   End With
   f = 2
   For i = 1 To 50
    .Rows(i).Font.ColorIndex = i
    If f = 3 Then Exit For
   Next i
   For j = 1 To 100
    .Cells(i, j).Font.ColorIndex = i
   Next j
  End With
 End With
 Application.DisplayAlerts = True
 Exit Sub
ErrorHandler:
 Select Case f
 Case 1
  c = i * 2 - 1
 Case 2
  f = 3
  Resume Next
 Case 3
  c = i * 100 + j + 1
 End Select
 MsgBox "約" & c & "パターン追加できました。" & vbCr & vbCr & _
  "現在" & 4036 - c & "パターンぐらいです、たぶん。"
 Application.DisplayAlerts = True
End Sub
'------------------↑ ココマデ ↑------------------
Excel2000,2003で動作確認済。

※書式>スタイルにあるスタイル数も制限の対象なので、
 まっさらのシートについて調べた場合も、0ではなく、
 既定のスタイルの数が表示されます(普通は6くらい)
※1単位で表示しますが、細かい挙動については詰めていないので、
 あくまで目安程度にお考えください。
※2行目のActiveSheet.Copyを削れば、
 アクティブなブック全体について調べます。

以上ご参考まで。長乱文陳謝。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/02/17 09:37
回答番号:No.3
この回答へのお礼ありがとうございます!
そうそう、これがまさに私が知りたかったことなんです。
早速作成いただいたマクロを実行してみました。
セル書式をたくさん使っているシートがわかりました。
今後、このマクロいろいろ活用させていただきます。
本当にありがとうございました。

回答

 

回答者:Wendy02 こんにちは。

そのセルの書式の消費量の計算はものすごくややこしく、それに単なる理論値でしかありませんから、実際のところは出てこなかったと思います。

>「セルの書式が多すぎるため、書式を追加できません。」

本来は、このようなメッセージは出ないはずなので、それが出るというのは、どこかに設定のミスが存在していることが多いです。

例:
・設定する必要のないセルには書式設定をしない。
・書式のユーザー定義で使っていないものは削除する。
・似ているものは統一する
・罫線や網掛けやパターンなどの設定を多く使わない。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/02/12 14:06
回答番号:No.2
この回答へのお礼やはり消費量の算出は難しいそうですね。大中小が5段階くらいでわかればと思ったのですが。ありがとうございました。

回答

 

回答者:chie65536 コピー元をどうこうしても無意味です。

コピー先で書式の上限に近付いてるんだから、コピー前に「コピー先の、一つのブックにまとめてるブックで、全てのシートについて書式を減らして」と言う作業をしてから、コピーを行う必要があります。

でも、コピー先のブックの書式を減らしたところで、いつかは限界が来ますから、本当の解決方法は「コピーするたびに、コピー先のシートの書式を全て削除する」しかないです。
種類:回答
どんな人:一般人
自信:参考意見
回答日時:08/02/12 13:37
回答番号:No.1
この回答へのお礼返答ありがとうございました。
最新から表示回答順に表示良回答のみ表示