2

У меня есть файл Excel размером более 7 МБ. Чтобы понять, откуда исходит вес, я использовал метод, описанный в этом вопросе SU.

Я сузил большую часть веса до одного листа и сделал Ctrl+End, чтобы проверить, какая ячейка последняя на этом листе. Как ни странно, эта ячейка была в последней возможной строке на листе (т. Е. В строке 1048576).

Затем я продолжил очищать форматирование от всех неиспользуемых строк, а затем - на всякий случай - выделил все пустые строки (под моими данными), используя alt+Shift+ и alt+Shift+, затем щелкнув правой кнопкой мыши и удалив ,

Однако после сохранения файла, его закрытия и повторного открытия - нажатие ctrl+End все равно возвращает меня к последней ячейке.

Я ознакомился с VBA-эквивалентом того, чтобы делать это вручную, и кажется, что этот SO-вопрос относится к одной и той же вещи - к рабочему листу.Свойство UsedRange .

Прежде чем погрузиться в VBA - могу ли я что-то сделать вручную, чтобы это исправить?

PS Прежде чем пометить это как дубликат, обратите внимание, что я намеренно исчерпал другие варианты в моем поиске ответа.

РЕДАКТИРОВАТЬ:

Чтобы уточнить, я видел этот ответ (и попробовал это) и эту статью KB (и попробовал это также) - без сигары. То же самое с этим более свежим ответом.

3 ответа3

2

Я ценю дополнительные усилия, которые вы предприняли для документирования ваших усилий. Спасибо.

Я часто сбрасываю раздутые книги, используя методы, которые не работают для вас.  Я могу выделить только два различия:

Во-первых, я никогда не пытался щелкнуть правой кнопкой мыши -> удалить. Я клавишник, поэтому я всегда использовал Alt+E+D. Это не должно иметь никакого значения, но произошли странные вещи.

Второе отличие состоит в том, что я никогда не застреваю, как ты, он всегда сбрасывается после сохранения. Большая помощь там, верно?

Вот несколько возможных решений:

Горизонтальные / Вертикальные Раздува

Сегодня у меня была проблема, когда мой VBA объединял листы по вертикали, а мой лист необъяснимым образом раздвигался по горизонтали. Сначала я был смущен и обеспокоен, потому что у меня было только вертикальное раздувание, и я не думал проверять по горизонтали, пока моя попытка сброса не удалась дважды. Пожалуйста, порадуйте меня ради полноты и чтобы это не случилось с вами:

  1. Начните с закрытия любых других сеансов Excel, чтобы текущая рабочая книга была единственной открытой книгой.
  2. Перейдите к своим данным с правой стороны и выберите первый пустой столбец - весь столбец.
  3. Ctrl+Shift+.
  4. Alt+E, затем D.
  5. Ctrl+Shift+End.
  6. Alt+E, затем D.
  7. Ctrl+Home
  8. Прокрутите вниз до ваших данных
  9. Выберите первую пустую строку - всю строку.
  10. Ctrl+Shift+.
  11. Alt+E, затем D.
  12. Ctrl+Shift+End.
  13. Alt+E, затем D.
  14. Ctrl+Home
  15. Ctrl+S

Да, две линии Ctrl+Shift+End являются избыточными, но я думаю, что вы можете пережить 15 нажатий клавиш.

Вы не должны закрывать свою книгу после сохранения, но я не буду советовать против этого.  Дать ему шанс. Если это не сработает, попробуйте VBA очень быстро.

Путь VBA

Не бойтесь большого плохого VBA, это отличный инструмент, и то, что мы делаем хорошо, занимает всего несколько секунд.

  1. Убедитесь, что предполагаемая рабочая таблица открыта и активна.
  2. Alt+F11, чтобы открыть редактор.
  3. Ctrl+G, чтобы открыть ближайшее окно.
  4. Тип ?activesheet.usedrange.address и нажмите Enter.
  5. Если диапазон выглядит нормальным (не слишком большим), то проблема не в вашем диапазоне.
  6. Если диапазон является чрезмерно большим. затем введите activesheet.usedrange и нажмите Enter. Обратите внимание, что первая команда использовала ? а это не так  Это потому, что вопросительный знак используется, когда мы хотим, чтобы VBA отображал текст, чтобы мы могли видеть значение или статус. Если мы не используем знак вопроса, то мы говорим VBA выполнить действие.
  7. После того, как вы нажали Enter, наведите курсор на строку, где вы использовали ? и нажмите Enter.
  8. если диапазон изменился, то все готово. Если это то же самое, то у вас все еще есть проблема.

Очень скрытые листы

Последняя задача - поиск скрытых листов. Не просто скрытый, но очень скрытый (я не придумываю это).

  1. Проводник проекта уже должен быть открыт в левой части экрана. Нажмите Ctrl+R, если это не так.
  2. Окно имеет незначительные различия между версиями Excel, но все они имеют одинаковое поведение разворачивающегося / сворачивающегося дерева. 
  3. Количество отображаемых проектов зависит от количества открытых книг Excel и надстроек. Если вы закрыли все другие рабочие книги и покажете больше, чем несколько проектов, то у вас будет еще кое-что, о чем мы расскажем позже.
  4. На данный момент найдите свой проект и разверните папки, чтобы отобразить объекты рабочей книги (отдельные рабочие листы и объект ThisWorkbook). Вы узнаете их, потому что они будут содержать имена ваших листов в скобках.
  5. Найдя, найдите имя, которого нет в вашей книге, на вкладке листа.
  6. если вы найдете его, выберите его в окне проводника и перейдите в окно свойств (под проводником или F4).
  7. Прокрутите вниз, чтобы найти видимое, это должно быть одно из двух значений: xlhidden или xlveryhidden .
  8. Щелкните внутри значения, чтобы открыть раскрывающееся меню, и выберите xlvisible .
  9. Если это не так, значит, вы выбрали неправильный лист и, возможно, неправильный проект, - дважды проверьте свой выбор. 
  10. Если вы нашли и распрятали листы, вернитесь к каждому из них и сбросьте эти диапазоны, чтобы увидеть, не сократилась ли ваша книга (не забудьте снова спрятать листы.

К сведению: очень скрытый лист отсутствует в контекстном меню скрытия / отображения в Excel, поэтому это один из лучших способов защиты конфигураций и вспомогательных столбцов.

  1. Мы закончили с VBA, поэтому закройте редактор и вернитесь в Excel. Нажмите Ctrl+F3, чтобы открыть менеджер имен.
  2. Ищите неожиданные именованные диапазоны. Обычно я не рекомендую удалять именованные диапазоны, если вы не очень хорошо знакомы с рабочей книгой, потому что многие продуктивные решения Excel/VBA не будут работать должным образом, если вы удалите нужный диапазон; однако, если вы обнаружите диапазон с ошибками, указывающий на несуществующие рабочие книги, ссылки на неиспользуемые диапазоны или с каким-то другим явно неправильным значением - тогда они готовы к удалению.

Некоторые другие полезные советы

Это значительно дольше, чем я ожидал, поэтому я постараюсь обернуть это ...

  • Проверьте свое условное форматирование - точно так же, как и именованные диапазоны, вы ищете явно неправильные или воспроизведенные условия.

  • Проверьте ваши запросы и модели данных.

  • Убедитесь, что у вас нет картинок / диаграмм / listobjects в труднодоступном месте (проверка, которую мы сделали с менеджером имен, должна выявить большинство, но не все, из них).

  • Убедитесь, что у вас нет нестандартных настроек конфигурации (я заметил, что галерея стилей коллеги на главной вкладке была заполнена с тем же 20% -ным акцентом, а расширение ее выявило сотни). Используя редактор VBA, я набрал ?activeworkbook.styles.count и вернул более 19 000; для сравнения у меня было 47).

  • Следите за чрезмерным форматированием - несколько сотен тысяч строк чисел, отформатированных как валюта, - это не то же самое, что несколько сотен тысяч строк, отформатированных с границами ячеек, имеющими форму лабиринта, заполненного разными цветами и множеством различных пользовательских форматов чисел, символов и шрифтов.

  • Проверьте сами данные, несколько сотен строк, охватывающих 20 столбцов с каждой ячейкой, заполненной до предела, были бы смущающей - но возможной - причиной раздувания

  • И, наконец, ядерный вариант. Сохраняйте каждый лист отдельно в виде текстового файла CSV и импортируйте его в новую рабочую книгу ... эта вещь гарантированно сработает, если у вас нет поврежденных данных - но восстановление ваших форматов, подключений и тому подобного может быть проблемой.

0

Меня попросили взглянуть на книгу Excel, которая была раздута до 60 Мб и была склонна к краху. Я определил, что на многих листах была формула и / или форматирование, которое упало до строки 1048576. Я решил, что 15 000 строк будут соответствовать их потребностям. Поэтому в строке 15,001 я сделал Ctrl+Shift+End или Ctrl+Shift+ Стрелка вниз. В выделенных ячейках щелкните правой кнопкой мыши и выберите «Удалено», выберите «Вся строка». Я изменил все диапазоны в формулах с A:Z на $ A1:$ Z $ 15000. При сохранении файла были удалены лишние строки со всех, кроме одного листа. Рабочая книга теперь до 10 мб. Я пробовал несколько вариантов, чтобы удалить лишние строки, но ничего не получалось. Я прочитал пост, чтобы выделить Range и изменить высоту строки. Итак, я выбрал пустую строку и изменил высоту строки. Я снова удалил все строки и сохранил электронную таблицу. На этот раз последний ряд теперь 15000. Размер файла сейчас 3,6 мб. Надеюсь это поможет.

-1

сохранить / закрыть / открыть должен сбросить UsedRange. Clear formatting недостаточно. Вы должны Clear или лучше Delete строки и столбцы после ожидаемой последней ячейки.

В зависимости от размера, в Excel 2013 есть интересная надстройка Inquire, которая позволяет анализировать ваш wb, а также опция « Очистить лишнее форматирование ячеек ».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .