Приветствую! Давно думал над этим вопросом и решил проверить, чтобы всё стало понятно
Итог: При пересчёте диапазона, пересчитываются только формулы этого диапазона, но НЕ ссылки в этих формулах
Пример: Если пересчитать формулу, которая ссылается ТОЛЬКО на ЗНАЧЕНИЯ, то всё нормально, но, если эта формула ссылается на ДРУГИЕ ФОРМУЛЫ, то эти ДРУГИЕ ФОРМУЛЫ ОБНОВЛЯТЬСЯ НЕ БУДУТ
Option Explicit
Option Private Module
'====================================================================================================
Sub RangeCalculate()
Dim clRes1 As Range, clRes2 As Range, AC&
Dim cl1 As Range, cl11 As Range, cl111 As Range
Dim cl2 As Range, cl22 As Range, cl222 As Range
Set clRes1 = sh.Range("A1"): Set clRes2 = sh.Range("A2")
Set cl1 = sh1.Range("A1"): Set cl11 = sh1.Range("A2"): Set cl111 = sh1.Range("B1")
Set cl2 = sh2.Range("A1"): Set cl22 = sh2.Range("A2"): Set cl222 = sh2.Range("B1")
Application.Union(cl1, cl11).ClearContents
Application.Union(cl2, cl22).ClearContents
AC = Application.Calculation: Application.Calculation = xlManual
If AC <> xlCalculationAutomatic Then Application.Calculate
cl1 = 1: cl11 = 2: cl2 = 20: cl22 = 200
Debug.Print "bef calc"
Debug.Print clRes1 & " = " & cl1 & " + " & cl11 & " + " & cl2 & " + " & cl22
Debug.Print clRes2 & " = " & cl111 & " + " & cl222, vbLf
clRes1.Calculate: Debug.Print "res 1 calc"
Debug.Print clRes1 & " = " & cl1 & " + " & cl11 & " + " & cl2 & " + " & cl22
Debug.Print clRes2 & " = " & cl111 & " + " & cl222, vbLf
clRes2.Calculate: Debug.Print "res 2 calc"
Debug.Print clRes1 & " = " & cl1 & " + " & cl11 & " + " & cl2 & " + " & cl22
Debug.Print clRes2 & " = " & cl111 & " + " & cl222, vbLf
sh.Calculate: Debug.Print "ShRes calc"
Debug.Print clRes1 & " = " & cl1 & " + " & cl11 & " + " & cl2 & " + " & cl22
Debug.Print clRes2 & " = " & cl111 & " + " & cl222, vbLf
Application.Calculation = AC
End Sub
'====================================================================================================
Лично для меня такой инструмент оказался бесполезен — ожидал большего (пересчёт всех зависимостей по цепочке) Применить хотел при Подборе Параметра (для ускорения получения результат подбора в целевой ячейке), но не получится…
Самому перебирать зависимости и пересчитывать их вполне может быть сопоставимо по скорости (или даже медленнее) с пересчётом всей книги Имеет смысл только в том случае, если пересчёт книги занимает много времени и/или связей с формулами немного
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Даже не думал над этим и было понятно, что если пересчитывать одну ячейку то пересчет будет этой ячейке и прочие не должны считаться. Могли быть иные предположения? Eсли результат пересчета этой ячейки, через циклическую ссылку, зависит от самого себя и требует пересчета остальных, то тут тоже все понятно - беда.
БМВ: Даже не думал над этим и было понятно…Могли быть иные предположения?
кому "понятно", а кому — достаточно размыто и двусмысленно Я вот считал, что "пересчитать ячейку" означает обновить значение в ней, а значит актуализировать ВСЕ зависимости
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
По-моему логичный результат. Пересчет формул именно в нужном диапазоне. Входящие данные как есть. Почему они должны пересчитываться? А если там ссылки на другие книги, они тоже должны быть открыты и пересчитаны, а там ссылки на другие книги и т.д. пересчитать все файлы с зависимыми ячейками?)) Посчитал сколько это по времени? А если где-то там всплывет ошибка или файл удалили где то в сетевой папке - кранты всему расчету))
есть вполне штатное окно "Желаете ли вы обновить ссылки на другие книги" и все связанные с этим варианты развития событий с ошибками, отсутствием и разрывом связей Было бы желание…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
При чем здесь окно? Чем отличаются ссылки на другие ячейки или другие листы или на другие книги в твоем изречении, которые должны обновлятся все данные по цепочке зависимостей?
Цитата
Jack Famous написал: ожидал большего (пересчёт всех зависимостей по цепочке)
Мой комментарий был к этому. Или "Здесь считаем, здесь не читаем, здесь рыбу заворачиваем?")
это формула и как раз формулу пересчитывают, а не ссылку. Ссылка это A1 и в формуле это значение и не более. Да и в целом, о чем вопрос? Если автокалькуляция включена, то на момент пересчета диапазона все пересчитано или будет пересчитано( естественно циклические ссылки в расчет не берем) , а если отключена, то будьте любезны все что нужно пересчитайте вручную режим же так и называется.
bedvit: Чем отличаются ссылки на другие ячейки или другие листы или на другие книги
лично я ссылки на другие книги не использую, но, даже, если они есть, я бы их не обновлял, потому что, если человек использует ЦЕЛЕВОЕ обновление диапазона, то на хрена ему лезть в другие файлы, которые "зафиксировали" свои результаты Можно было и окно вывести и параметры придумать, чтобы и так и так можно было Вообще мелкомягкие крайне скупы на примеры, а читать их талмуты нет ни малейшего желания
Тема - просто справка-разъяснение, что работает это вот так
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: хрена ему лезть в другие файлы, которые "зафиксировали" свои результаты
По такой же логике: Нахрена ему лезть в другие листы, и ячейки, если они тоже "зафиксировали" свои результаты. В других книгах, тоже могут быть зависимые и влияющие ячейки от/на текущий диапазон.
Я не делаю ссылок в другие книги У меня всегда открыта только одна книга (кроме ситуаций визуального сравнения или копипаста) Я считаю такой подход в работе наиболее правильным и наименее подверженным ошибкам Ожидание от пересчёта связаны с этим подходом "работаю в одной книге" и логикой (может быть разная)
Как я уже писал выше, все варианты точечного пересчёта можно было дать на откуп пользователю (с параметрами по умолчанию) в настройках и/или диалоговых окнах
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
bedvit: он посчитал так удобнее для пользователя или придерживается философии минимализма
ну это просто смешно
Цитата
bedvit: если Алексей не делает ссылок, отключить их к черту
где ты такое у меня прочитал? У тебя биполярочка? Ты ведь САМ спросил про другие книги - я сказал, что они МНЕ неинтересны, но МОЖНО ПРЕДУСМОТРЕТЬ и ЭТУ ситуацию
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
bedvit, просто вот скажи - в каких случаях этот точечный пересчёт может быть удобен? Или может ты уже его где-то используешь?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Нет, нигде не использовал. Думаю это достаточно узкая область использования. Я сейчас точно не вспомню ссылку на матчасть (может кто-то из спецов поделится). Инфа в следующем: Excel хранит таблицу/дерево зависимых ячеек, и при пересчете книги/листа пересчитывает только ту ветку, которая нужна (в которой были изменения). Итого при общем пересчете он и так оптимизирует расчет. И смысл расчета куска диапазона, без пересчета нужной ветки, только в каких то узких задачах.
bedvit, ну вот мне сложно представить, зачем пересчитывать формулу, которая ссылается ТОЛЬКО на ЗНАЧЕНИЯ и куда удобней было бы пересчитать ВСЕ ЗАВИСИМОСТИ или, хотя бы, это можно было настраивать
Повторюсь - темя не для я так вижу, а для это работает вот так "За справку спасибо
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: в каких случаях этот точечный пересчёт может быть удобен?
Алексей, я уже писал на форуме, что очень давно, за счет управляемого пересчета диапазонов, общий расчет выполнялся в разы быстрее, но с тех пор и вычислительные мощности выросли и механизмы расчета Excel оптимизировали, и недавно обнаружил, что расчет конкретного диапазона уступил по скорости автоматическому при тех же параметрах. Думаю остался метод для совместимости, хотя для процессов моделирования и контроля изменений возможно пересчет конкретных областей еще применим.
Что-то подобное (автоматом быстрее), я и имел ввиду, когда писал
Цитата
Jack Famous: Самому перебирать зависимости и пересчитывать их вполне может быть сопоставимо по скорости (или даже медленнее) с пересчётом всей книги. Имеет смысл только в том случае, если пересчёт книги занимает много времени и/или связей с формулами немного
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Добрый день! Особо любопытные могут на это дерево полюбоваться: \xl\calcChain.xml в файле книги. Об истории вопроса и особой роли пересчета формул для Excel - здесь.
sokol92, приветствую! Всегда с удовольствием изучаю ваши советы и темы
А что значат буквы i , l и s в xml-таблице?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄