web-dev-qa-db-ja.com

多すぎるセル形式

  1. ゼロから再作成された10枚のシート、更新された12枚のシート、生データがロードされた5枚のシート、およびレポートのマクロで使用される7枚のシートを持つ大規模なファイルがあります。
  2. 最近、新しいシートを追加して、Excelを実行しています"Too many many cells format"問題。

私が試したこと

私はいくつかのGoogle検索結果を読んだことがあり、フォーマットを簡素化する必要があると言われていますが、最大4000個の異なるセル形式までどのようになったのかさえ分かりません。いくつか。

また、ファイルが実行されるたびにポップアップが表示されますが、すべてではなく、ファイルが実行されるまで表示され、実行されるたびに表示されます。マクロは、ゼロから10枚のシートを作成するなど、非常に多くの作業を行っているため、何をすべきかわかりません。

誰か知っている

  • マクロのすべてのセル形式とそれらを使用しているセルの数のリストを取得するために実行できますか?
  • 余分なセル形式を削除するのに役立つと信頼しているプログラムの

ありがとう

17
Craig

「セル形式」は複雑です。セルには実際には「フォーマット」はありません。フォント(名前とサイズがある)、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
7
Mike Lewis

あなたが説明した問題により、私(および同僚)は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
46
Chuck The Nerd

多くの人がこの問題に遭遇しているようです。

ほとんどの場合この問題は、未使用で破損しやすいスタイルの過剰な数に関連しており、セル固有のセル形式コンボの総数ではありません。

XL2003に保存できるXL2007 OOXMLファイルを修正するユーティリティを作成しました。ブログ投稿への link は次のとおりです。

  • .Net3.5およびMS Excel 2007が必要です。
  • Xlsxまたはxlsmファイルを修正します。
  • 投稿には、アプリに付属するReadMeファイルがあります。

他のいくつかのフォーラムで提案されているように、Open Officeを使用してファイルをさらに破損する危険を冒す必要はありません。

6
XLGeek

この問題が発生したので、それをクリアする最も簡単な方法は このExcelアドイン を使用することでした。これは、 問題に関するMicrosoftページ からの「公式」回答のようです。

.xlamファイルを使用していたのと同じくらい混乱している人のために、それをダウンロードした後、Excelでこれを行います。

  1. ファイル<オプション<アドインをクリックします。
  2. [管理]オプションで[移動]をクリックします。
  3. [アドイン]ウィンドウで[参照]をクリックし、XLAMファイルが保存されている場所を参照して強調表示し、[OK]をクリックします。
  4. [アドイン]ウィンドウで新しいアドインを有効にし、[OK]をクリックします。
  5. ホーム画面のリボンバーに、[スタイルの削除]セクションが表示されます。このセクションには、ブック内のスタイルの数(この問題が発生している場合はおそらく数千)を示すボタンがあります。
  6. リボンのボタンをクリックすると、すべての重複したフォーマットが削除されます。

表示されない場合は、リボンに正しく表示されていることを確認してください。リボンを右クリックして、「リボンのカスタマイズ」と言います。次に、アドインをクリックします。アクティブなアプリケーションアドインの下に、「余分なスタイルを削除」が表示されます。

2019 Update:そのリンクで、彼らは現在、問題などに関する議論を含む大きなZipファイルにすべてを入れています。そのZipファイルには、ソースコードと呼ばれる別のzipフォルダーがあり、そのフォルダーに.xlamファイルがあります。

2
Alex S

Excel 2007+で「セル形式が多すぎます」というエラーメッセージにつながるバグに対処しました。 http://sergeig888.wordpress.com/2011/05/06/msft-released-hot-fix-for -Excel-2007-custom-styles-duplication / バグ修正は、既存のスタイル関連のファイル破損を削除しないことに注意してください。 Open XMLベースのツール(無料で利用可能)は、Excelオブジェクトモデルベースのツールにアクセスできない要素を削除できる唯一のオプションです。たとえば、組み込みのスタイル、隠しスタイルなどを装った悪いスタイルなどです。 100%スタイルに関連する破損のないファイル。

2
XLGeek

1つの解決策は、 ASAPユーティリティ を使用することです。シートセクションには、remove all unused stylesオプション。その後、ワークブックを閉じて再度開く必要があると思います。

1
Barbara Wiseman

これにより、デフォルトのスタイル(通常、説明、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プロパティが実際に参照しているものを知りたいです。

1
LeasMaps

SpreadsheetGear for .NET は、状況に役立つ可能性のある一意でない形式を結合します。

無料試用版をダウンロードできます こちら 役立つかどうかを確認したい場合。評価ソフトウェアと共にインストールされている「SpreadsheetGear 2009 for Windows」アプリケーションにワークブックをロードして、ワークブックを保存するだけです。

実際に多くのユニークなフォーマットを使用している場合は、単純化する必要があります。フォント/セルの色(内部)、数値形式、水平および垂直の配置、境界線、インデントレベル、およびおそらく私が考えていないいくつかの固有の組み合わせによって、テーブルに一意のエントリが作成されます。

もう1つのオプションは、Excel 2007に切り替えることです。この場合、一意のセル形式の制限が4,000から64Kに増加します。

免責事項:私はSpreadsheetGear LLCを所有しています

1
Joe Erickson

この問題は以前に見たことがあります。私が言いたいことを証明するために再現することは可能です。ちょっとしたキャッチ22ですが、「フォーマットが多すぎる」という問題があるシートがある場合は、新しいシートを開き、多すぎるフォーマットのシートから1つのセルをコピーして、新しいブックに貼り付けてください。これで、このワークブックは「感染」した状態になり、形式エラーが多すぎます。特別な貼り付けを使用して制限しない限り、その貼り付けには多くの形式データが含まれているようです。

物事を改善する方法は?回避策は、HTML形式で保存機能を使用することです。これは機能しますが、ご容赦ください。私はここで2003年について話している、私は2007年に何が起こるかわからない、多分このバグが修正された。だから... Htmlとして保存し、Excelを閉じます。 do n'tマクロを実行し、一度ロードしたらスプレッドシートとして保存して、新しいセッションをロードしてこれをロードします。

この新しいスプレッドシートを閉じて再度開くと、Too Many Formatsの問題はなくなります。

ファイルを開くことができる場合は、[試行]> [編集]> [クリア]> [フォーマット]を選択します。

うまく機能したフォーマットを選択する前に、シートをハイライトします。

何かが足りない場合に備えて、これを行う前にExcelのコピーを作成してください。古いドキュメントと相互参照できます。

0
Zach Shaw