При удалении строки excel зависает

Студворк — интернет-сервис помощи студентам

Добрый день!
Господа, появилась проблема, решение которой не могу найти нигде. Раньше такого не было и надстроек нет.
Ситуация следующая: я сделал шаблон для работы. По ходу работы я загружаю шаблон, вписываю необходимые переменные, а после часто приходится удалить некоторые строки, которые не нужны. (Для каждого случая — это разные строки. Прописывать каждый раз все формулы — это долго, а вот удалить к примеру 10 строк намного быстрее и проще).
Так вот в момент удаления строк зависает и закрывается Excel (иногда в некоторых ячейках этих строк отображается ошибка #ССЫЛКА!, но не всегда. Данная ошибка возникает потому что некоторые ячейки данной таблицы ссылаются на ячейки на другой странице, а сама таблица — это итоговая информация, отчет). Нажал показать подробности проблемы и увидел следующее:
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: EXCEL.EXE
Версия приложения: 14.0.7179.5000
Отметка времени приложения: 58a5e2fb
Имя модуля с ошибкой: EXCEL.EXE
Версия модуля с ошибкой: 14.0.7179.5000
Отметка времени модуля с ошибкой: 58a5e2fb
Код исключения: c0000005
Смещение исключения: 00261b14
Версия ОС: 6.1.7601.2.1.0.256.48
Код языка: 1058

Дополнительные сведения об этой проблеме:
LCID: 1049
skulcid: 1049

Как быть? какие варианты решения могут быть?
Во вложении прикрепил скрин, с версией экселя (лицензионный).

Я вообще не понял смысл действия: сначала Вы определяете в какой строке произошло изменение, а потом запускаете макрос который прогоняет по всему диапазону и в зависимости от значения в столбце А скрывает и отображает лист имя которого написано в столбце В
Может проще будет сделать так:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 And Target.Row >= 11 And Target.Row <= Cells(Rows.Count, 1).End(xlUp).Row Then
        On Error Resume Next
        If IsObject(Worksheets("" & Cells(Target.Row, 2))) Then
            Sheets("" & Cells(Target.Row, 2)).Visible = Cells(Target.Row, 1).Value = "ДА"
        End If
        On Error GoTo 0
    End If
End Sub

Замените этим макросом тот, который сейчас у Вас на листе ФККО.
Он проверит менялись ли значения в столбце А с 11 строки до последней заполненной, если изменение было то будет именно с той строкой в которой были изменения. Прежде всего проверит наличие листа с именем которое написано в столбце В этой строки и если имя корректное, т.е. лист с таким именем существует, то скроет или отобразит его в зависимости от значения в столбце А.

Есть два ноутбука: тот же процессор, тот же объём ОЗУ (8 гб), на обоих ssd, на обоих одинаковая версия ОС и Офиса (2016). На одном таблица, при удалении 13 тысяч строк зависает намертво, на втором всё идеально. На проблемном ноуте полностью переустанавливалась ОС и Офис, проблема осталась. В безопасном режиме Excel’я проблема такая же. Одна и та же таблица, но на одном ноутбуке зависает таблица, на втором удаляешь-возвращаешь-удаляешь-возвращаешь — всё идеально.


  • Вопрос задан

    более двух лет назад

  • 1082 просмотра

Удаление строк в больших таблицах

Voh

Дата: Четверг, 21.02.2013, 19:14 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 20

Здравствуйте!
Поднимал этот вопрос на другом форуме, но окончательного решения видимо не будет, рискну попробовать здесь:)

Вот этот пример с фильтром работает очень медленно в таблицах с большим числом строк,
есть ли достойное альтернативное решение либо доработка существующего?:

Нужно удалять строки макросом по нескольким условиям без изменения структуры листа,
в котором содержится таблица с большим количеством строк. В данном случае условием является «0» в шестом столбце и заданный цвет в том же столбце на всем листе, начиная с 22 строки. Подробнее и с примером во вложении.

[vba]

Код

Sub macros()

Rows(«22:22»).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range(Range(«a21:F21»), ActiveCell.SpecialCells(xlLastCell)).AutoFilter
Selection.AutoFilter field:=6, Criteria1:=»=0,00″
Range(Range(«a21:F21»), ActiveCell.SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
Application.ScreenUpdating = True
End Sub

[/vba]

Спасибо заранее.

К сообщению приложен файл:

2075924.xls
(100.0 Kb)

Сообщение отредактировал PelenaЧетверг, 21.02.2013, 19:19

 

Ответить

AlexM

Дата: Четверг, 21.02.2013, 20:43 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Удалить строку, если в ячейке 6-го столбца (F) значение 0 (Ноль)
А с цветом непонятно. Задан цвет серый, в таблице его не видно. Удалять нули серые или что угодно серого цвета???



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Сообщение отредактировал AlexMЧетверг, 21.02.2013, 20:46

 

Ответить

Гость

Дата: Четверг, 21.02.2013, 23:19 |
Сообщение № 3

To AlexM:
Удалять что угодно серого цвета, в таблице это всякие строки маленькой высоты с надписями подраздел и просто пустые. Они удаляются при запуске второго макроса.

 

Ответить

AlexM

Дата: Пятница, 22.02.2013, 08:49 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Ваши макросы не не ботают в Excel2003
Первый не разбирался почему, а второй — в Excel2003 в автофильтре нет отбора по цвету ячейки.

Код, который работает, сравнить скорости я не смогу.
[vba]

Код

Sub Macros3()
Application.ScreenUpdating = False
Dim i As Long, strS As String
For i = 24 To Range(«F» & Rows.Count).End(xlUp).Row
If (Range(«F» & i).Value <> «» And Range(«F» & i).Value = 0) Or Range(«F» & i).Interior.ColorIndex = 48 Then
strS = strS & «,» & i & «:» & i
End If
Next: Range(Mid(strS, 2)).EntireRow.Delete
Application.ScreenUpdating = True
End Sub

[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

Voh

Дата: Пятница, 22.02.2013, 12:54 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 20

Вставляю в мой файл с длинной таблицей, выдает:
Run-time error ‘1004’
Method ‘Range’ of objekt ‘_Global’ failed
(((
Выделяет в макросе строчку:
Next: Range(Mid(strS, 2)).EntireRow.Delete

А так вроде уже почти получилось)

 

Ответить

AlexM

Дата: Пятница, 22.02.2013, 13:06 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

А на вашем файле с короткой таблицей работает.
Если строку
[vba]

Код

Next: Range(Mid(strS, 2)).EntireRow.Delete

[/vba]
изменить так
[vba]

Код

Next: Range(Mid(strS, 2)).Delete

[/vba]
то макрос быстрее работает



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Сообщение отредактировал AlexMПятница, 22.02.2013, 13:11

 

Ответить

ikki

Дата: Пятница, 22.02.2013, 13:11 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

Замечаний:
0% ±


Excel 2003, 2010

AlexM, у такого метода есть ограничения.
и очень сильные.
sad
точнее — строка ограничена 255 символами.
для тестирования:
[vba]

Код

Sub t()
     Dim s$, t$, r As Range, i&
     For i = 1 To 100 Step 2
         s = s & «,» & i & «:» & i
         Set r = Range(Mid(s, 2))
         Debug.Print i, r.Areas.Count, Len(s)
     Next
End Sub

[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

Сообщение отредактировал ikkiПятница, 22.02.2013, 13:19

 

Ответить

AlexM

Дата: Пятница, 22.02.2013, 13:33 |
Сообщение № 8

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Цитата (ikki)

у такого метода есть ограничения

Спасибо. Буду знать, что есть ограничения.
Где почитать какие? Сейчас несколько статей посмотрел, а какие не узнал. :-(

Цитата (ikki)

строка ограничена 255 символами.

Ок понял.
Правим код.
Перед Next вставить строку
[vba]

Код

If Len(strS) > 240 Then Range(Mid(strS, 2)).Delete: strS = «»

[/vba]
А строку с Next дополняем
[vba]

Код

Next: If Len(strS) > 0 Then Range(Mid(strS, 2)).Delete

[/vba]
Так должно работать.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Сообщение отредактировал AlexMПятница, 22.02.2013, 13:52

 

Ответить

Voh

Дата: Пятница, 22.02.2013, 21:28 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 20

Макрос примерно 30-40 секунд вычисляет, потом:

Run-time error ’13’:
Type mismatch

На этот раз выделяет желтым:
If (Range(«F» & i).Value <> «» And Range(«F» & i).Value = 0) Or Range(«F» & i).Interior.ColorIndex = 48 Then

причем в файле частично удаляет строки, пока не понял по какому принципу..

 

Ответить

AlexM

Дата: Пятница, 22.02.2013, 23:05 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Замените строку
[vba]

Код

For i = 24 To Range(«F» & Rows.Count).End(xlUp).Row

[/vba]
на
[vba]

Код

For i = Range(«F» & Rows.Count).End(xlUp).Row To 24 Step -1

[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

Voh

Дата: Пятница, 22.02.2013, 23:35 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 20

Угу, теперь цикл доходит до конца, правда сортирует только по 0, а цвета игнорирует.
Ну с этим я смогу справиться, например спрячу везде нули, а вот проблема в том, что
макрос выполняется более 2х минут у меня, а на слабеньких компах будет еще медленнее..
Т.е. это и является сутью моей проблемы: не получается добиться того, чтобы в очень больших таблицах
удалялись строки по условию также быстро, как и в маленьких..

 

Ответить

AlexM

Дата: Суббота, 23.02.2013, 08:41 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

В файле примере не удаляет цветные строки?
В примере таблицы два серых цвета. Макрос удаляет строки с темно серые.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

Voh

Дата: Суббота, 23.02.2013, 14:08 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 20

Нет, цветные строки не удаляются в файле-примере. Я специально заполнял даже их предварительно 48 цветом, как в Вашем коде…(

 

Ответить

Hugo

Дата: Суббота, 23.02.2013, 16:32 |
Сообщение № 14

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Если бы не нужно было анализировать цвет — можно на любую таблицу сделать удаление очень бымтро.
Ну а если нужен анализ цвета — тогда делайте используя фильтр по цвету под 2007.
На каком Экселе вообще будет выполняться работа?


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

Voh

Дата: Суббота, 23.02.2013, 19:33 |
Сообщение № 15

Группа: Пользователи

Ранг: Новичок

Сообщений: 20

На 2007. Я думаю, сделаю удаление по цвету вторым макросом просто, раз в одном скомпоновать сложно будет.

 

Ответить

Michael_S

Дата: Суббота, 23.02.2013, 20:24 |
Сообщение № 16

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

Цитата (Voh)

Нужно удалять строки макросом по нескольким условиям без изменения структуры листа,

Цитата (Гость)

Удалять что угодно серого цвета, в таблице это всякие строки маленькой высоты с надписями подраздел и просто пустые.

Два несовместимых условия: ели удалять все серые сроки в вашем примере — группировка исчезнет. Вернее, останется только один уровень.

Сообщение отредактировал Michael_SСуббота, 23.02.2013, 20:25

 

Ответить

shanemac51

Дата: Суббота, 23.02.2013, 21:12 |
Сообщение № 17

Группа: Проверенные

Ранг: Новичок

Сообщений: 33


Репутация:

4

±

Замечаний:
0% ±


[vba]

Код

Sub Macros4()
»обычно удаление идет с хвоста
Dim tm!
tm = Timer
Application.ScreenUpdating = False
Dim i As Long, strS As String
Dim i2
i = Range(«F» & Rows.Count).End(xlUp).Row
Debug.Print i
Do While i > 24
If Cells(i, 6) = 0 Or Cells(i, 6).Interior.ColorIndex = 48 Then
Rows(i).Delete
End If
i = i — 1
Loop
Application.ScreenUpdating = True
Debug.Print «Строки удалены за » & Timer — tm & » сек»
End Sub

[/vba]

 

Ответить

Voh

Дата: Воскресенье, 24.02.2013, 10:44 |
Сообщение № 18

Группа: Пользователи

Ранг: Новичок

Сообщений: 20

Цитата (Michael_S)

Два несовместимых условия

Да, Вы правы, но это неизбежно и, в качестве исключения, допустимо.

 

Ответить

Voh

Дата: Воскресенье, 24.02.2013, 11:03 |
Сообщение № 19

Группа: Пользователи

Ранг: Новичок

Сообщений: 20

Цитата (shanemac51)

Sub Macros4

10 минут..(

 

Ответить

Michael_S

Дата: Воскресенье, 24.02.2013, 12:17 |
Сообщение № 20

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

10 минут — это сколько строк у вас в таблице? и сколько удаляется?

 

Ответить

Используйте решения, приведенные в этой статье, в указанном порядке. Чаще всего сталкиваются с проблемами приведёнными в начале.

1. Отключить аппаратное ускорение обработки изображения

Это самая частая причина нестабильной работы программы. Заметно подвисание интерфейса, даже при изменении размера столбца или строки.

Откройте Параметры Excel > Дополнительно > Отображение > Отключить аппаратное ускорение обработки изображения. Установите чекбокс напротив пункта отключения «Аппаратного ускорения». По умолчанию чекбокс не стоит. Нажмите ОК и перезагрузите программу.

Чаще всего возникает у тех, кто использует встроенную видеокарту. Так например тормоза будут присутствовать при использовании процессора Intel Core I7-9700K и его встроенного видеоядра. После активации пункта «Отключить аппаратное ускорение обработки изображения» проблема с зависаниями и тормозами сходит на нет!

Excel отключить аппаратное ускорение обработки изображения
Отключение аппаратного ускорения

С такой же проблемой сталкиваются пользователи ноутбуков.

2. Отключить надстройки. Выявление возможных проблем с надстройками

Хоть и надстройки предназначены облегчать работу с Excel, но иногда они могут мешать работе или конфликтовать с Excel. Существует надстройки антивирусов, Acrobat, OneDrive, Консультант, конвертеры файлов и другие.

Мешать работе могут надстройки находящиеся сверху, в списке «Активные надстройки приложений».

пункт Надстройки Excel 2019
Надстройки Excel
  1. Откройте Параметры Excel > Надстройки.
  2. Внизу, где Управление: выберите Надстройки COM и нажмите кнопку Перейти.
  3. Уберите все флажки в списке и нажмите ОК.
  4. Закройте приложение Excel и снова запустите его.
Надстройки COM Excel
Надстройки COM Excel

Если проблема больше не возникает после перезапуска программы, включите надстройки по одной, пока она снова не появится. Так вы сможете понять, что вызывает проблему. Перезагружайте Excel после включения каждой надстройки.

3. Перейти на SSD диск (установить вместо жесткого диска HDD).

На скорость работы программы Excel, также влияет скорость работы накопителя (жёсткого диска), особенно, когда ваш файл сильно разрастается. Скорость работы всей операционной системы Windows и Excel заметно вырастит, если они будут установлены на SSD (твердотельный накопитель). Так, например, Windows при включении будет грузится 5-15 секунд, вместо 2-10 минут. А Excel 1-2 секунды, вместо 15-ти.

Если материнская плата или разъёмы в ноутбуке имеют слот M.2, то и SSD диск с разъёмом M.2 будет приоритетным, т.к. его скорость гораздо выше, по сравнению с обычным SSD.

Также не исключаем тот факт, что Ваш обычный HDD диск уже может начинать «сыпаться» (терять сектора). Из-за чего могут происходить сбои не только в программе, но и во всей операционной системе.

4. Очистка папки временных файлов TEMP

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

Данную папку необходимо почистить, также это поможет освободить место на диске. Быстро открыть папку TEMP можно выполнив команду выполнить: WIN + R и ввести в строке Открыть: %TEMP%, далее нажать ОК.
Полный путь в Windows 10 и 11: C:UsersИмя пользователяAppDataLocalTemp.

команда выполнить
Выполнить

Закройте все программы или только Excel и удалите все файлы из данной папки. Перезагрузите Операционную Систему.
В основном, все файлы в папке TEMP не нужны и не важны, за исключением очень редких случаев. Нужные временные файлы, в дальнейшем, программы создадут заново.

5. Очистка от временных файлов папки %appdata%/Microsoft/Excel

Помимо папки TEMP, Excel для временных файлов использует ещё одну папку. Редко, но может помочь. Нажмите WIN + R и введите в строке Открыть: %appdata%, далее нажать ОК. Полный путь, куда вы попадёте – это C:UsersИмя пользователяAppDataRoaming.
Затем найти Microsoft > Excel и удалить все файлы.

6. Наличие вирусов и проверка актуальности версии антивирусной программы. Конфликты с Excel

Отсутствие антивирусных программ и устаревание антивирусных баз влечёт к появлению вирусов на компьютере, которые очень сильно могут влиять на производительность всего компьютера в целом. Плюс если антивирусная программа не обновлена, Excel может работать неправильно.

Проверьте, нет ли конфликтов

Многие антивирусные программы поддерживают интеграцию с Excel, из-за чего вы можете столкнуться с проблемами производительности. Как проверить включенные Надстройки и отключить ненужные, мы с Вами обсуждали в Пункте 2. Попробуйте отключить все надстройки антивирусной программы, установленные в Excel.

Для защиты от новых вирусов очень важно следить за обновлением антивирусных программ.
Если у вас до сих пор нет такой программы, то рекомендуем Eset Internet Security.


Основные приёмы устранения конфликтов, почему Excel тормозит или зависает, мы рассмотрели.
Напишите пожалуйста в комментариях, какой способ помог Вам!

Может быть интересно:
✦ Лучшие зарядные устройства для телефонов и планшетов
✦ Лучшие кабеля для зарядки телефонов и планшетов

Понравилась статья? Поделить с друзьями:
  • При удалении дубликатов какие строки удаляются excel выше или ниже
  • При сохранении excel создается tmp
  • При удалении диаграммы excel
  • При сохранении excel появляется файл
  • При удаление формулы в excel