здравствуйте. Excel виснет, если удалить столбик с формулами, файл прикрепляю
1. открываем файл 2. продляем формулу A6:C11 например до 60000 (вручную либо по кнопке) 3. выделяем столбец A:A. жмём клавишу Delete на клавиатуре. всё в порядке, удалилось. 4. выделяем столбец B:B. жмём клавишу Delete на клавиатуре. ловим зависон на неопределенное время
в чём причина и как это лечить? (Excel 2010) спасибо
Но я бы попробовал заменить функцию поиска порядкового номера на другую... Или вообще поменять подход - а для чего ищется номер? А если разрешены будут макросы - то можно номера формировать вообще кодом...
AndreTM макросом тоже же зависает после продления, у вас нет?
порядковый номер просто так для сравнения. что одна формула удаляется нормально (столбик A), а вторая не нормально. (столбик B) а по поводу нумерации - если всё делать на макросах (даже самое простейшее как A2 = A1+1), так зачем же вообще Excel тогда? открываем VB вместо экселя и пишем
то чистит достаточно быстро. Даже без отключения автопересчета и т.п. Тут всё дело в том, что если мы чистим "стандартно" - очистка идет по диапазону "сверху вниз", что вызывает пересчёты на каждой ячейке, причем задействованный в пересчётах диапазон растет. Если же удалять данные с конца диапазона - не оказывается затрагиваемых ячеек, и очистка идет без пересчётов. Судя по всему, дело упирается в волатильность функции МАКС().
Igor67 можете выложить ваш новый файл, который не висит? надеюсь там сохранились формулы
AndreTM да, таким макросом удаляет за 25 секунд
другое дело, - никто не сталкивался с таким? то есть может как то поменять на другую аналогичную формулу там. или так и крутить макросы, чтобы "тупо" удалить или заменить эти ячейки в столбце B ? то есть получается напрямую без макросов со столбцом B целиком работать практически невозможно, если только не по частям по 1000 строк например?
Получается, что невозможно. Надо использовать другую формулу. Вернее, другие функции листа в формуле. Или, возможно, столбец "B" вообще не нужен, и можно эту нумерацию получить другими способами, прямо по месту, где она требуется. Или получить эту нумерацию (в столбце "B") макросом. Честно говоря, я не вижу такой (конкретно прикладной и востребованной) задачи, где бы потребовалось полсотни-сотню тысяч строк обрабатывать на листе Excel'я, да ещё строя формулы, обращающиеся к динамическим диапазонам...
KuklP вот отлично. малой кровью. получается нужно знать ориентировочный диапазон разбега максимального числа и в нём искать, а не во всём столбце. то есть если например диапазон небольшой (ближайшие десять, или сотня строк) - то это решение отлично поможет. мне помогло, а вот если у других диапазон - весь столбец, то похоже им будет сложнее, и писать конкретно эту функцию на макросах.
вот! или например заменить на функцию СЧЕТ, что я и сделаю (если макс = количеству чисел) мне года полтора назад кажется Михаил С писал тут на форуме одну очень полезную формулу, и из нее я и научился использовать такой вспомогательный столбик МАКС. но получается СЧЁТ делает то же самое в данном случае и не ест столько ресурсов (в примере столбик D)
Range("B"& i & "000:B"& i + 1 & "000").ClearContents
Debug.Print Timer - t, i
Next
[b12:b999].ClearContents
MsgBox Timer - t1
EndSub
Что примечательно, отключение автопересчета для листа или книги, практически не влияет на скорость выполнения макросов. Похоже МАКС - суперволатильная функция
я в сообщении #13 наверное продлил не ту формулу, что в файле. D8 =ЕСЛИ(C8="";"";СЧЁТ(D$1:D7)+1) - в файле. при продлении и попытке удаления зависает намертво. D8 =ЕСЛИ(C8="";"";СЧЁТ(D1:D7)+1) - работает быстро.
значит это проблема не функции МАКС, а самого принципа. получается, что МАКС(D$1:D7), что СЧЁТ(D$1:D7) работают одинаково долго на больших диапазонах, получается, либо уменьшать диапазон поиска - МАКС(D1:D7), либо это нехитрое действие писать на макросах для каждого нужного столбика в файле :|