Excelでシートの多いファイルだったり、色々な書式を設定してあるファイルを使っていると、、、
「表示形式を追加できません」
「セルの書式が多すぎるため、書式を追加できません」
「別のセルの形式が多すぎます。」というたぐいのメッセージが出てきて、書式が設定できなくなったり、ファイルの保存自体ができなくなったりして大変困ることがあります。
問題としてはこの問題ですね。
Sub delete_name_and_style()
On Error Resume Next
'名前定義を全削除(名前を関数その他に有効活用している場合はここは削除)
Dim N As Name
For Each N In ActiveWorkbook.Names
N.Delete
Next
'書式(スタイル)定義を全削除
Dim M()
J = ActiveWorkbook.Styles.Count
ReDim M(J)
For i = 1 To J
M(i) = ActiveWorkbook.Styles(i).Name
Next
For i = 1 To J
If InStr("Hyperlink,Normal,Followed Hyperlink", _
M(i)) = 0 Then
ActiveWorkbook.Styles(M(i)).Delete
End If
Next
End Sub
この現象はユーザが書式設定をするたびにExcelが勝手に、そのセルの書式パターンをスタイルとして記録しており(そのスタイルを現在使用していなくてもずっと残るという謎?というか糞仕様)、それが上限を超えたことによって起こるようなのです。
※個人的にはこの動きはバグと言っても良いんじゃないかと思いますが・・・。
そしてこの上限というのがExcel 2003だと4000パターン、2007からは64000パターンになっているのですが、これを一括で削除するインターフェースは提供されていないので一個ずつ消さないといけないわけですが、4000でもやってられませんね。。。
そんな時に使えるのがこのマクロ。
※このマクロでは名前定義でも似たようなこと(名前の定義されたシートや領域のコピー&ペーストを繰り返しているとどんどん蓄積されていく)が起こるので名前定義もすべて消すようになってます。
必要な場合はその部分は削除して使用してください。
On Error Resume Next
'名前定義を全削除(名前を関数その他に有効活用している場合はここは削除)
Dim N As Name
For Each N In ActiveWorkbook.Names
N.Delete
Next
'書式(スタイル)定義を全削除
Dim M()
J = ActiveWorkbook.Styles.Count
ReDim M(J)
For i = 1 To J
M(i) = ActiveWorkbook.Styles(i).Name
Next
For i = 1 To J
If InStr("Hyperlink,Normal,Followed Hyperlink", _
M(i)) = 0 Then
ActiveWorkbook.Styles(M(i)).Delete
End If
Next
End Sub