私が試したこと
私はいくつかのGoogle検索結果を読んだことがあり、フォーマットを簡素化する必要があると言われていますが、最大4000個の異なるセル形式までどのようになったのかさえ分かりません。いくつか。
また、ファイルが実行されるたびにポップアップが表示されますが、すべてではなく、ファイルが実行されるまで表示され、実行されるたびに表示されます。マクロは、ゼロから10枚のシートを作成するなど、非常に多くの作業を行っているため、何をすべきかわかりません。
誰か知っている
ありがとう
「セル形式」は複雑です。セルには実際には「フォーマット」はありません。フォント(名前とサイズがある)、NumberFormat、Height、Width、Orientationなどがあります。
したがって、「フォーマット」の意味を定義する必要があります。
以下は、フォント名とサイズを取得するコードです。任意の属性に置き換えることができます。
以下のコードは、ワークブックに「Formats」という名前のワークシートが作成されていることを前提としています。マクロを実行すると、フォント名とサイズがそのワークシートにリストされます。
Public Sub GetFormats()
Dim CurrentSheet As Integer
Dim UsedRange As Range
Dim CurrentCell As Range
Dim rw As Long
Sheets("Formats").Cells.ClearContents
rw = 1
For CurrentSheet = 1 To Sheets.Count
Set UsedRange = Range(Sheets(CurrentSheet).Range("A1"), Sheets(CurrentSheet).Range("A1").SpecialCells(xlLastCell))
For Each CurrentCell In UsedRange
FontUsed = CurrentCell.Font.Name + ":" + CStr(CurrentCell.Font.Size)
If Sheets("Formats").Cells.Find(FontUsed) Is Nothing Then
Sheets("Formats").Cells(rw, 1).Value = FontUsed
rw = rw + 1
End If
Next
Next CurrentSheet
End Sub
あなたが説明した問題により、私(および同僚)はExcel 2010の使用時に何時間もの生産性を失うことになりました。
' Description:
' Borrowed largely from http://www.jkp-ads.com/Articles/styles06.asp
Option Explicit
' Description:
' This is the "driver" for the entire module.
Public Sub DropUnusedStyles()
Dim styleObj As Style
Dim rngCell As Range
Dim wb As Workbook
Dim wsh As Worksheet
Dim str As String
Dim iStyleCount As Long
Dim dict As New Scripting.Dictionary ' <- from Tools / References... / "Microsoft Scripting Runtime"
' wb := workbook of interest. Choose one of the following
' Set wb = ThisWorkbook ' choose this module's workbook
Set wb = ActiveWorkbook ' the active workbook in Excel
Debug.Print "BEGINNING # of styles in workbook: " & wb.Styles.Count
MsgBox "BEGINNING # of styles in workbook: " & wb.Styles.Count
' dict := list of styles
For Each styleObj In wb.Styles
str = styleObj.NameLocal
iStyleCount = iStyleCount + 1
Call dict.Add(str, 0) ' First time: adds keys
Next styleObj
Debug.Print " dictionary now has " & dict.Count & " entries."
' Status, dictionary has styles (key) which are known to workbook
' Traverse each visible worksheet and increment count each style occurrence
For Each wsh In wb.Worksheets
If wsh.Visible Then
For Each rngCell In wsh.UsedRange.Cells
str = rngCell.Style
dict.Item(str) = dict.Item(str) + 1 ' This time: counts occurrences
Next rngCell
End If
Next wsh
' Status, dictionary styles (key) has cell occurrence count (item)
' Try to delete unused styles
Dim aKey As Variant
On Error Resume Next ' wb.Styles(aKey).Delete may throw error
For Each aKey In dict.Keys
' display count & stylename
' e.g. "24 Normal"
Debug.Print dict.Item(aKey) & vbTab & aKey
If dict.Item(aKey) = 0 Then
' Occurrence count (Item) indicates this style is not used
Call wb.Styles(aKey).Delete
If Err.Number <> 0 Then
Debug.Print vbTab & "^-- failed to delete"
Err.Clear
End If
Call dict.Remove(aKey)
End If
Next aKey
Debug.Print "ENDING # of style in workbook: " & wb.Styles.Count
MsgBox "ENDING # of style in workbook: " & wb.Styles.Count
End Sub
多くの人がこの問題に遭遇しているようです。
ほとんどの場合この問題は、未使用で破損しやすいスタイルの過剰な数に関連しており、セル固有のセル形式コンボの総数ではありません。
XL2003に保存できるXL2007 OOXMLファイルを修正するユーティリティを作成しました。ブログ投稿への link は次のとおりです。
他のいくつかのフォーラムで提案されているように、Open Officeを使用してファイルをさらに破損する危険を冒す必要はありません。
この問題が発生したので、それをクリアする最も簡単な方法は このExcelアドイン を使用することでした。これは、 問題に関するMicrosoftページ からの「公式」回答のようです。
.xlamファイルを使用していたのと同じくらい混乱している人のために、それをダウンロードした後、Excelでこれを行います。
表示されない場合は、リボンに正しく表示されていることを確認してください。リボンを右クリックして、「リボンのカスタマイズ」と言います。次に、アドインをクリックします。アクティブなアプリケーションアドインの下に、「余分なスタイルを削除」が表示されます。
2019 Update:そのリンクで、彼らは現在、問題などに関する議論を含む大きなZipファイルにすべてを入れています。そのZipファイルには、ソースコードと呼ばれる別のzipフォルダーがあり、そのフォルダーに.xlamファイルがあります。
Excel 2007+で「セル形式が多すぎます」というエラーメッセージにつながるバグに対処しました。 http://sergeig888.wordpress.com/2011/05/06/msft-released-hot-fix-for -Excel-2007-custom-styles-duplication / バグ修正は、既存のスタイル関連のファイル破損を削除しないことに注意してください。 Open XMLベースのツール(無料で利用可能)は、Excelオブジェクトモデルベースのツールにアクセスできない要素を削除できる唯一のオプションです。たとえば、組み込みのスタイル、隠しスタイルなどを装った悪いスタイルなどです。 100%スタイルに関連する破損のないファイル。
1つの解決策は、 ASAPユーティリティ を使用することです。シートセクションには、remove all unused styles
オプション。その後、ワークブックを閉じて再度開く必要があると思います。
これにより、デフォルトのスタイル(通常、説明、20%Accent1など)を除くすべてのスタイルが削除されます。ユーザーが作成したスタイルを含めますが、ワークブックをクリーンアップするための迅速で汚い方法です:
Sub NewNukeStyles()
Dim tempstyle As Style
For Each tempstyle In ActiveWorkbook.Styles
If tempstyle.BuiltIn = False Then
If tempstyle.Locked = True Then 'not sure what this is
tempstyle.Delete
End If
End If
Next tempstyle
End Sub 'NukeStyles
「オブジェクトがロックされているかどうかを示すブール値」以外のtempstyle.lockedプロパティが実際に参照しているものを知りたいです。
SpreadsheetGear for .NET は、状況に役立つ可能性のある一意でない形式を結合します。
無料試用版をダウンロードできます こちら 役立つかどうかを確認したい場合。評価ソフトウェアと共にインストールされている「SpreadsheetGear 2009 for Windows」アプリケーションにワークブックをロードして、ワークブックを保存するだけです。
実際に多くのユニークなフォーマットを使用している場合は、単純化する必要があります。フォント/セルの色(内部)、数値形式、水平および垂直の配置、境界線、インデントレベル、およびおそらく私が考えていないいくつかの固有の組み合わせによって、テーブルに一意のエントリが作成されます。
もう1つのオプションは、Excel 2007に切り替えることです。この場合、一意のセル形式の制限が4,000から64Kに増加します。
免責事項:私はSpreadsheetGear LLCを所有しています
この問題は以前に見たことがあります。私が言いたいことを証明するために再現することは可能です。ちょっとしたキャッチ22ですが、「フォーマットが多すぎる」という問題があるシートがある場合は、新しいシートを開き、多すぎるフォーマットのシートから1つのセルをコピーして、新しいブックに貼り付けてください。これで、このワークブックは「感染」した状態になり、形式エラーが多すぎます。特別な貼り付けを使用して制限しない限り、その貼り付けには多くの形式データが含まれているようです。
物事を改善する方法は?回避策は、HTML形式で保存機能を使用することです。これは機能しますが、ご容赦ください。私はここで2003年について話している、私は2007年に何が起こるかわからない、多分このバグが修正された。だから... Htmlとして保存し、Excelを閉じます。 do n'tマクロを実行し、一度ロードしたらスプレッドシートとして保存して、新しいセッションをロードしてこれをロードします。
この新しいスプレッドシートを閉じて再度開くと、Too Many Formatsの問題はなくなります。
ファイルを開くことができる場合は、[試行]> [編集]> [クリア]> [フォーマット]を選択します。
うまく機能したフォーマットを選択する前に、シートをハイライトします。
何かが足りない場合に備えて、これを行う前にExcelのコピーを作成してください。古いドキュメントと相互参照できます。