web-dev-qa-db-ja.com

巨大なExcelファイルを削減する方法

* .XLSには、シートが1つだけの小さなシンプルなファイルがあります。このシートには、数字に小さなテキストがあるセルがたくさんあります。 (ファイルサイズ24Kb)

しかし、多くの変更を行い、コピーと貼り付け、式の拡張、保存を行いました。その後、これらの変更のほとんどを削除し、データがほとんどないこのシートの複製を4つ作成しました。

今、私の新しいファイルは非常に巨大です:2.5Mb!

非表示のデータはどこにあり、どのように削除できますか?

300枚のシートと各シートに1枚の画像がある実際のファイルでも同じ問題があります:ファイルサイズ280Mb

11
Alban

これらの異常に大きなファイルをクリーニングするツールを追加するVBAファイルを作成しました。このスクリプトは、最後のセルのリセットに実際に使用された最後のセル([Ctrl] + [End])の後のすべての列と行をクリアし、画像圧縮を有効にします。

自動インストール(マクロを有効にして実行する)を使用してアドインを開発し、コンテキストメニューに多くの新しいボタンを追加します。

  1. 最適化
  2. 最適化および保存
  3. オプティマイザーを無効にする

Context menu after install it

これは Microsoft Office 2003のKB とPPの回答に基づいています。個人の改善と:

  1. 画像の圧縮を追加
  2. 列のバグを修正
  3. excel 2007-2010-との偉業の互換性...(255カラム以上)

[〜#〜] solution [〜#〜]>ダウンロードできますmy * .xlam file ToolsKit

メインコードは

Sub ClearExcessRowsAndColumns()
    Dim ar As Range, r As Double, c As Double, tr As Double, tc As Double
    Dim wksWks As Worksheet, ur As Range, arCount As Integer, i As Integer
    Dim blProtCont As Boolean, blProtScen As Boolean, blProtDO As Boolean
    Dim shp As Shape
    Application.ScreenUpdating = False
    On Error Resume Next
    For Each wksWks In ActiveWorkbook.Worksheets
      Err.Clear
      'Store worksheet protection settings and unprotect if protected.
      blProtCont = wksWks.ProtectContents
      blProtDO = wksWks.ProtectDrawingObjects
      blProtScen = wksWks.ProtectScenarios
      wksWks.Unprotect ""
      If Err.Number = 1004 Then
         Err.Clear
         MsgBox "'" & wksWks.Name & "' is protected with a password and cannot be checked.", vbInformation
      Else
         Application.StatusBar = "Checking " & wksWks.Name & ", Please Wait..."
         r = 0
         c = 0

         'Determine if the sheet contains both formulas and constants
         Set ur = Union(wksWks.UsedRange.SpecialCells(xlCellTypeConstants), wksWks.UsedRange.SpecialCells(xlCellTypeFormulas))
         'If both fails, try constants only
         If Err.Number = 1004 Then
            Err.Clear
            Set ur = wksWks.UsedRange.SpecialCells(xlCellTypeConstants)
         End If
         'If constants fails then set it to formulas
         If Err.Number = 1004 Then
            Err.Clear
            Set ur = wksWks.UsedRange.SpecialCells(xlCellTypeFormulas)
         End If
         'If there is still an error then the worksheet is empty
         If Err.Number <> 0 Then
            Err.Clear
            If wksWks.UsedRange.Address <> "$A$1" Then
               ur.EntireRow.Delete
            Else
               Set ur = Nothing
            End If
         End If
         'On Error GoTo 0
         If Not ur Is Nothing Then
            arCount = ur.Areas.Count
            'determine the last column and row that contains data or formula
            For Each ar In ur.Areas
               i = i + 1
               tr = ar.Range("A1").Row + ar.Rows.Count - 1
               tc = ar.Range("A1").Column + ar.Columns.Count - 1
               If tc > c Then c = tc
               If tr > r Then r = tr
            Next
            'Determine the area covered by shapes
            'so we don't remove shading behind shapes
            For Each shp In wksWks.Shapes
               tr = shp.BottomRightCell.Row
               tc = shp.BottomRightCell.Column
               If tc > c Then c = tc
               If tr > r Then r = tr
            Next
            Application.StatusBar = "Clearing Excess Cells in " & wksWks.Name & ", Please Wait..."
            Set ur = wksWks.Rows(r + 1 & ":" & wksWks.Rows.Count)
                'Reset row height which can also cause the lastcell to be innacurate
                ur.EntireRow.RowHeight = wksWks.StandardHeight
                ur.Clear

            Set ur = wksWks.Columns(ColLetter(c + 1) & ":" & ColLetter(wksWks.Columns.Count))
                'Reset column width which can also cause the lastcell to be innacurate
                ur.EntireColumn.ColumnWidth = wksWks.StandardWidth
                ur.Clear
         End If
      End If
      'Reset protection.
      wksWks.Protect "", blProtDO, blProtCont, blProtScen
      Err.Clear
    Next
    Application.StatusBar = False
    ' prepare les combinaison de touches pour la validation automatique de la fenetre
    ' Application.SendKeys "%(oe)~{TAB}~"

    ' ouvre la fenetre de compression des images
    Application.CommandBars.ExecuteMso "PicturesCompress"
    Application.ScreenUpdating = True
End Sub


Function ColLetter(ColNumber As Integer) As String
    ColLetter = Left(Cells(1, ColNumber).Address(False, False), Len(Cells(1, ColNumber).Address(False, False)) - 1)
End Function
5
Alban

ファイルを.XLSB形式で保存してサイズを削減します。 XLSBでは、VBAとマクロをファイルに残すこともできます。バイナリ形式で50メガのファイルを10未満に見ました。

11
RazorSky

ファイルがテキストのみの場合、最良の解決策は各ワークシートを.csvとして保存してからExcelに再インポートすることです。少し手間がかかりますが、20MBのファイルを43KBに削減しました。

3
user4216274

私はExcelで広範囲に働いており、次の3点が非常に有用であることがわかりました

明らかにデータを保持していないセルがあるかどうかを確認しますが、Excelはそれらにデータがあると見なします

これは、シートで次のプロパティを使用して見つけることができます

ActiveSheet.UsedRange.Rows.Count
ActiveSheet.UsedRange.Columns.Count

この範囲がデータのあるセルよりも大きい場合、残りの行/列を削除します

あなたはそれが解放できるスペースの量を見て驚かれることでしょう

ファイルを.xlsb形式に変換する

XLSM形式は、ExcelをOpen XMLに準拠させるためのものですが、ExcelのXML形式を実際に使用する例はほとんどありません。これにより、サイズが約50%削減されます。

情報を保存する最適な方法

たとえば、株価を約10年間保存する必要があり、株式の始値、高値、安値、終値を保存する必要がある場合、これは(252 * 10)*(4)になります=使用されているセル

代わりに、Open、High、Low、Closeに個別の列を使用する代わりに、フィールドセパレーターOpen:High:Low:Closeを使用して単一の列に保存します。

必要なときにいつでも単一の列から情報を抽出する関数を簡単に作成できますが、現在使用しているほぼ3分の2のスペースが解放されます

3
Anant Gupta

iファイルの形式を*。XLSXに変更します。この変更によりファイルが圧縮され、ファイルサイズが15%減少します

2
Alban

100個以上の画像があるおかげで、サイズが24MBのExcelファイルがありました。次の手順でサイズを5MB未満に縮小しました。

  1. 各画像を選択し、それを切り取り(CTRL X)、ALT E Sビットマップオプションにより特別なモードで貼り付けます
  2. どのビットマップがまだ大きいかを見つけるには、シートごとにファイルの1つを選択し、CTRL Aを実行する必要があります。これにより、すべての画像が選択されます。
  3. いずれかの画像をダブルクリックすると、画像のリセットオプションが上部に表示されます。
  4. リセット画像をクリックすると、まだ大きな画像がすべて表示されます。
  5. CTRL Z(UNDO)を実行し、手順1のようにこれらのバランス画像をBITMAP(* .BMP)に再度貼り付けます。

これはヘルプフォーラムにリストされていなかったため、これを理解するのに2日かかりました。この応答が誰かを助けることを願っています

BR Gautam Dalal(インド)

1
Gautam Dalal

次のような投稿を見てください: http://www.officearticles.com/Excel/clean_up_your_worksheet_in_Microsoft_Excel.htm または http://www.contextures.on.ca/xlfaqApp.html#Unused

基本的には、グーグルを試してみてください?

0
PP.

巨大な.xlsxファイルの興味深い理由を見つけました。元のワークブックは20枚ほどでしたが、20 MBだったので、1枚のシートで新しいワークブックを作成したので、さらに管理しやすくなります。まだ11.5 MB em!)空白行。現在は13.5 KBです

0
user6320980