Страницы: 1
RSS
Excel зависает на простейшей формуле
 
здравствуйте.
Excel виснет, если удалить столбик с формулами, файл прикрепляю

1. открываем файл
2. продляем формулу A6:C11 например до 60000 (вручную либо по кнопке)
3. выделяем столбец A:A. жмём клавишу Delete на клавиатуре. всё в порядке, удалилось.
4. выделяем столбец B:B. жмём клавишу Delete на клавиатуре. ловим зависон на неопределенное время

в чём причина и как это лечить? (Excel 2010)
спасибо

(кросс-тема http://www.excelworld.ru/forum/5-237-51595-16-1370537037)
Изменено: KUDRIN - 08.02.2014 13:30:38
 
Отключите автопересчет формул и удаляйте себе.
Я сам - дурнее всякого примера! ...
 
это?: Формулы -> Параметры вычислений -> Автоматически / Вручную?
стоит "Вручную".

попробуйте удалить B:B - получается?
Изменено: KUDRIN - 05.06.2013 20:37:11
 
Да. А сейчас второй раз попробовал - тормоз. Мож я в первый раз забыл заполнить?
Я сам - дурнее всякого примера! ...
 
Попробовать очищать тоже макросом?

Но я бы попробовал заменить функцию поиска порядкового номера на другую... Или вообще поменять подход - а для чего ищется номер? А если разрешены будут макросы - то можно номера формировать вообще кодом...
 
KuklP может быть

AndreTM макросом тоже же зависает после продления, у вас нет?

порядковый номер просто так для сравнения. что одна формула удаляется нормально (столбик A), а вторая не нормально. (столбик B)
а по поводу нумерации - если всё делать на макросах (даже самое простейшее как A2 = A1+1), так зачем же вообще Excel тогда? открываем VB вместо экселя и пишем  :)  
Изменено: KUDRIN - 05.06.2013 21:40:52
 
Не знаю что у Вас в файле :o висит :(  Но, если скопировать все 6тыс. строк в новый файл - мгновенно и безо всяких проблем :)
 
Цитата
AndreTM макросом тоже же зависает после продления, у вас нет?
Если вот таким:
Код
1
2
3
4
5
6
7
Sub ClearMyRange2()
    Dim i As Long
    For i = 60000 To 12 Step -1
        Cells(i, 2).ClearContents
        ' If i Mod 100 = 0 Then Application.StatusBar = i
    Next
End Sub
то чистит достаточно быстро. Даже без отключения автопересчета и т.п.
Тут всё дело в том, что если мы чистим "стандартно" - очистка идет по диапазону "сверху вниз", что вызывает  пересчёты на каждой ячейке, причем задействованный в пересчётах диапазон растет. Если же удалять данные с конца диапазона - не оказывается затрагиваемых ячеек, и очистка идет без пересчётов.
Судя по всему, дело упирается в волатильность функции МАКС().
 
Igor67 можете выложить ваш новый файл, который не висит? надеюсь там сохранились формулы

AndreTM да, таким макросом удаляет за 25 секунд

другое дело, - никто не сталкивался с таким? то есть может как то поменять на другую аналогичную формулу там. или так и крутить макросы, чтобы "тупо" удалить или заменить эти ячейки в столбце B ? то есть получается напрямую без макросов со столбцом B целиком работать практически невозможно, если только не по частям по 1000 строк например?
Изменено: KUDRIN - 07.06.2013 07:29:43
 
Получается, что невозможно.
Надо использовать другую формулу. Вернее, другие функции листа в формуле. Или, возможно, столбец "B" вообще не нужен, и можно эту нумерацию получить другими способами, прямо по месту, где она требуется. Или получить эту нумерацию (в столбце "B") макросом.
Честно говоря, я не вижу такой (конкретно прикладной и востребованной) задачи, где бы потребовалось полсотни-сотню тысяч строк обрабатывать на листе Excel'я, да ещё строя формулы, обращающиеся к динамическим диапазонам...
 
KUDRIN, я прошу прощения. Не досмотрел. У меня Excel вылетел и столбец был заполнен не полностью на 60 тыс строк :(
 
Достаточно убрать арифметическую прогрессию в формуле и все летает. И заполняется и очищается моментально.
Я сам - дурнее всякого примера! ...
 
Igor67, всё ок

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

вот! или например заменить на функцию СЧЕТ, что я и сделаю (если макс = количеству чисел)
мне года полтора назад кажется Михаил С писал тут на форуме одну очень полезную формулу, и из нее я и научился использовать такой вспомогательный столбик МАКС. но получается СЧЁТ делает то же самое в данном случае и не ест столько ресурсов (в примере столбик D)
Изменено: KUDRIN - 06.06.2013 14:14:16
 
Если все же нужно мгновенно очистить столбец B исходного (тормознутого) файла программно, то так:
Код
1
2
3
4
5
6
7
Sub ClearB()
  With ActiveSheet
    .EnableCalculation = False
    .UsedRange.Columns(2).ClearContents
    .EnableCalculation = True
  End With
End Sub
Изменено: ZVI - 06.06.2013 16:07:55 (Удаление столбца заменено на его очистку)
 
ZVI спасибо
ваш макрос в данном примере выбивает Excel в глубокий режим сна, поэтому собственно и была создана эта тема
 
Цитата
KUDRIN пишет:
поэтому собственно и была создана эта тема
Т.е. сначала ZVI написал макрос, а потом Вы создали тему))
 
У меня макрос Андрея отработал за 160с. Попробовал удалять по 1000 строк, результат 115с.:
Код
1
2
3
4
5
6
7
8
9
10
11
Sub www()
    Dim i As Long
    t1 = Timer
    For i = 59 To 1 Step -1
        t = Timer
        Range("B" & i & "000:B" & i + 1 & "000").ClearContents
        Debug.Print Timer - t, i
    Next
    [b12:b999].ClearContents
    MsgBox Timer - t1
End Sub
Что примечательно, отключение автопересчета для листа или книги, практически не влияет на скорость выполнения макросов. Похоже МАКС - суперволатильная функция :)
Я сам - дурнее всякого примера! ...
 
я в сообщении #13 наверное продлил не ту формулу, что в файле.
D8 =ЕСЛИ(C8="";"";СЧЁТ(D$1:D7)+1) - в файле. при продлении и попытке удаления зависает намертво.
D8 =ЕСЛИ(C8="";"";СЧЁТ(D1:D7)+1) - работает быстро.

значит это проблема не функции МАКС, а самого принципа.
получается, что МАКС(D$1:D7), что СЧЁТ(D$1:D7) работают одинаково долго на больших диапазонах,
получается, либо уменьшать диапазон поиска - МАКС(D1:D7),
либо это нехитрое действие писать на макросах для каждого нужного столбика в файле  :|
Изменено: KUDRIN - 07.06.2013 08:19:00
 
KUDRIN, о чём я и сказал...
Страницы: 1
Читают тему
Loading...