2

ここでExcelに非常にイライラする問題があります-最後のセルを削除できません。最後に使用された列と行 1048576 でロックされています。一般的な修正に進む前に、インターネットで見つけたすべての修正を既に試しました。

  • 未使用の行をすべて削除し、未使用の列をすべて削除します
  • 保存する、閉じる、再度開く
  • 未使用のすべての行と列のフォーマットをクリアする
  • worksheet.UsedRange、UsedRange.Rows.Count、UsedRange(1) などを参照するさまざまなマクロ。
  • 上記のさまざまな順序での多くの順列、常に保存/再オープンが続きます

これは Excel 2007 と Excel 2013 の両方で発生しています。ワークシートのすべてを削除(つまり、すべてを選択、右クリック、削除) し、保存/開いても、最後のセルは最後の行を参照したままです。

ワークシートのアクティブな領域をコピーして新しいシートに貼り付けることができますが、以前にこれが発生したことがあり、将来の参考のために完全な修正を見つけたいです (または、これが実際にバグであることを知っているので、ここで気が狂うだけではありません!)

4

2 に答える 2

0

また、ワークシートがほとんど空である状況が数回ありましたが、何らかの奇妙な理由で、Excel は 100 万行すべてを保存し、通常のトリックはどれも機能しませんでした。

このような状況で私がやっていることは、.xlsx ファイルを直接編集することです。

  1. .xlsx (または .xlsm) ファイルの名前を .zip に変更すると、コンテンツが表示されます
  2. ファイル xl\worksheets\sheet1.xml を抽出します (または、非常に大きなシート - 番号付けを Excel の番号付けに合わせる必要があることに注意してください)。
  3. 強力なエディターでファイルを編集します。特にUltraEditをお勧めします。XMLを読み取り可能な形式にフォーマットする「XML Convert to CR/LF」機能(フォーマットの下)があるためです。(100 万行の場合、この書式設定には数分かかる場合があります!)
  4. ファイル検索で、保持したい最後の行が<row r="X" どこにあるかを探します。Xここから</sheetData>(通常は最後から 3 行目まで) すべてを削除します。
  5. ファイルを保存し、.zip に戻し、.zip の名前を .xlsx/.xlsx に戻します。

終わり!

于 2013-10-30T10:06:34.720 に答える
0

(1日遅れて1ドル足りない)

私はまだExcel 2003を使用していますが、この問題があります。これらのマクロは古いシートを削除し、新しいシートを追加します。最初のマクロはシートを切り捨てて、「Ctl-End Lastcell」がコンテンツの最後になるようにします。2 番目のマクロは、シートを削除し、同じ名前の新しいシートを追加するだけなので、「Ctl-End Lastcell」は A1 になります。

Sub ShTrunc() ' truncate active sheet to content only
  Dim sold$, snew$, rowz&, colz&, zRange As Range
  ' -- get old and new sheet names
  sold = ActiveSheet.Name ' old sheet name
  Sheets.Add
  snew = ActiveSheet.Name ' new name
  ' -- get the "true" last row and column
  ' based on http://www.rondebruin.nl/win/s9/win005.htm
  Sheets(sold).Activate
  Set zRange = Cells.Find("*", [a1], xlFormulas, xlPart, xlByRows, xlPrevious, False)
  If zRange Is Nothing Then rowz = 1 Else rowz = zRange.Row
  Set zRange = Cells.Find("*", [a1], xlFormulas, xlPart, xlByColumns, xlPrevious, False)
  If zRange Is Nothing Then colz = 1 Else colz = zRange.Column
  ' -- copy the content from old sheet, paste to new sheet
  Range(Cells(1, 1), Cells(rowz, colz)).Copy ' Sheets(snew).Cells(1, 1)
  Sheets(snew).Activate
  ActiveSheet.Paste
  ' -- delete old sheet and rename new to old
  Application.DisplayAlerts = False
  Sheets(sold).Delete
  Application.DisplayAlerts = True
  Sheets(snew).Name = sold ' rename to old name
  ' -- the following checks if the world works as it should
  If ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row <> rowz Then Stop
  If ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column <> colz Then Stop
End Sub

Sub ShDelAdd() ' delete and add active sheet (to CLEAR it)
  ' this is a simpler version of ShTrunc if you only want to clear a sheet
  Dim sold$, snew$
  sold = ActiveSheet.Name
  Application.DisplayAlerts = False
  Sheets(sold).Delete
  Application.DisplayAlerts = True
  Sheets.Add
  snew = ActiveSheet.Name ' new name
  Sheets(snew).Name = sold ' rename to old name
  ' -- the following checks if the world works as it should
  If ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row <> 1 Then Stop
  If ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column <> 1 Then Stop
End Sub
于 2019-10-03T16:28:44.207 に答える