11

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

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

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

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

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

4

8 に答える 8

12

ファイルを .XLSB 形式で保存してサイズをカットします。XLSB では、VBA とマクロをファイルに残すこともできます。バイナリ形式で 50 MB のファイルが 10 未満になるのを見てきました。

于 2013-07-08T14:56:57.607 に答える
5

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

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

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

インストール後のコンテキストメニュー

これはMicrosoft office 2003 の KBと PP の回答に基づいています。出会いの改善で :

  1. 画像の圧縮を追加
  2. 列のバグを修正
  3. Excel 2007 - 2010 - ... (255 以上の列) との feat の互換性

解決策 > *.xlam ファイル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
于 2013-07-08T17:00:54.810 に答える
3

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

于 2014-11-04T21:49:49.993 に答える
3

I have worked extensively in Excel and have found the following 3 points very useful

Find if there are cells which apparently do not hold any data but Excel considers them to have data

You can find this by using the following property on a sheet

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

If this range is more than the cells on which you have data, delete the rest of the rows/columns

You will be surprised to see the amount of space it can free

Convert files to .xlsb format

XLSM format is to make Excel compliant with Open XML, but there are very few instances when we actually use the XML format of Excel. This reduces size by almost 50% if not more

Optimum way of storing information

For example if you have to save the stock price for around 10 years, and you need to save Open, High, Low, Close for a stock, this would result in (252*10) * (4) cells being used

Instead, of using separate columns for Open,High,Low,Close save them in a single column with a field separator Open:High:Low:Close

You can easily write a function to extract info from the single column whenever you want to, but it will free up almost 2/3rd space that you are currently taking up

于 2016-02-07T19:46:36.950 に答える
1

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

基本的に:グーグルを試してみませんか?

于 2013-07-08T13:48:00.643 に答える
0

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

于 2016-05-11T14:37:54.100 に答える