Vba excel пересчет ячейки

Содержание

  1. Пересчет в Excel
  2. Зависимость, «грязные» ячейки и пересчитанные ячейки
  3. Асинхронные пользовательские функции
  4. Переменные и постоянные функции
  5. Режимы вычисления, команды, выборочный пересчет и таблицы данных
  6. Вычисление диапазонов
  7. Активное вычисление листов
  8. Вычисление указанных листов
  9. Повторное создание и принудительный пересчет дерева книги
  10. Все открытые книги
  11. Повторное создание и принудительное вычисление дерева всех открытых книг
  12. Vba excel пересчет ячейки
  13. Vba excel пересчет ячейки
  14. Как только пересчитать или обновить выбранные ячейки в Excel?

Пересчет в Excel

Относится к: Excel 2013 | Office 2013 | Visual Studio

Пользователь может вызывать пересчет в Microsoft Excel несколькими способами, например:

  • путем ввода новых данных (если Excel находится в режиме автоматического пересчета, описанном далее в этой статье);
  • явным указанием Excel пересчитать всю книгу или ее часть;
  • путем удаления или вставки строки или столбца;
  • путем сохранения книги при заданном параметре Пересчет перед сохранением;
  • путем выполнения некоторых действий автофильтра;
  • двойным щелчком по разделителю строк или столбцов (в режиме автоматического вычисления);
  • путем добавления, редактирования или удаления заданного имени;
  • путем переименования листа;
  • путем изменения позиции листа относительно других листов;
  • путем скрытия или отображения строк (не столбцов).

В этой статье не делается различий между непосредственным нажатием клавиши или кнопки мыши пользователем и выполнением этих задач командой или макросом. Пользователь запускает команду или делает что-либо, чтобы она запустилась, поэтому это также считается действием пользователя. Таким образом, слово «пользователь» также означает «пользователь либо команда или процесс, запущенные пользователем».

Зависимость, «грязные» ячейки и пересчитанные ячейки

Вычисление листов в Excel можно рассматривать как процесс из трех этапов:

  1. Создание дерева зависимостей
  2. Создание цепочки вычислений
  3. Пересчет ячеек

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

��� ����������� ��������� �����, �������� ��� ����� ����� �������, Excel ������ ������� ������ ������������ � ������� ����������. При вводе новых данных или новых формул Excel помечает все ячейки, которые зависят от новых данных, как требующие пересчета. Помеченные такие образом ячейки называются «грязными». Все прямые и косвенные зависимые ячейки помечаются как «грязные», поэтому если ячейка B1 зависит от ячейки A1, а ячейка C1 — от B1, то при изменении ячейки A1 ячейки B1 и C1 помечаются как «грязные».

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

Помечая ячейки как «грязные», после следующего пересчета Excel повторно оценивает содержимое каждой грязной ячейки в порядке, определяемом цепочкой вычислений. В приведенном выше примере это означает, что сначала используется B1, а затем — C1. Этот пересчет происходит сразу после того, как Excel помечает ячейки как «грязные», если режим пересчета является автоматическим; в противном случае это происходит позже.

Начиная с Microsoft Excel 2002, объект Range в Microsoft Visual Basic для приложений (VBA) поддерживает метод Range.Dirty, который помечает ячейки как требующие вычисления. Если он используется вместе с методом Range.Calculate (см. следующий раздел), он включает принудительный пересчет ячеек в заданном диапазоне. Это полезно при выполнении ограниченного вычисления во время макроса, где режим вычисления установлен в ручном режиме, чтобы избежать дополнительных затрат на вычисление ячеек, не связанных с макрос-функцией. Методы вычисления диапазона недоступны через API C.

� Excel�2007 ������ ���� �������� ��� ��������� ��������� � ��������� �������, ����� ������� ������� ���������� �� �������� ���� �� ����� � �� ����� ���� ��������� ������������. Вы можете настроить Excel для использования нескольких потоков на компьютере с одним процессором или одного потока на многопроцессорном или многоядерном компьютере.

Асинхронные пользовательские функции

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

Переменные и постоянные функции

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

Переменными являются следующие функции Excel:

  • NOW
  • TODAY
  • RANDBETWEEN
  • OFFSET
  • INDIRECT
  • INFO (в зависимости от аргументов)
  • CELL (в зависимости от аргументов)
  • SUMIF (в зависимости от аргументов)

Интерфейсы API VBA и C поддерживают способы сообщить Excel, что пользовательскую функцию следует обрабатывать как переменную. � VBA ���������������� ������� ����������� ���������� ��������� �������.

Режимы вычисления, команды, выборочный пересчет и таблицы данных

В Excel есть три режима вычисления:

  • Automatic
  • Автоматический, кроме таблиц
  • Manual

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

������� ������ � ��� ����������� ��������� �� �����. Сначала пользователь настраивает вычисление результата на листе. Это зависит от одного или двух изменяемых клавишных вводов и других параметров. Затем пользователь может создать таблицу результатов для набора значений одного или обоих клавишных вводов. Таблица создается с помощью мастера таблиц данных. После настройки таблицы Excel по одному отправляет вводы в вычисление и копирует полученное значение в таблицу. Так как можно использовать один или два ввода, таблицы данных могут быть одномерными или двумерными.

Пересчет таблиц данных обрабатывается немного по-другому:

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

Учитывая, что Excel по-другому обрабатывает пересчет таблиц данных, а вычисление больших таблиц, зависящих от сложных или длинных вычислений, может занимать много времени, Excel позволяет отключить автоматическое вычисление таблиц данных. Для этого выберите режим вычисления «Автоматический, кроме таблиц». � ���� ������ ������������ ����� ������������� ������, ����� ������� F9 ��� �������� ������������� ����������� ��������.

Excel ������������� ������, � ������� ������� ����� �������� ����� ��������� � ��������� ��. Эти методы улучшались от версии к версии, чтобы обеспечить возможность более точного управления. Возможности API C в этом отношении отражают возможности, доступные в Excel версии 5, поэтому не предоставляют такого управления, как при использовании VBA в более поздних версиях.

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

Вычисление диапазонов

VBA: Range.Calculate (представлен в Excel 2000, изменен в Excel 2007) и Range.CalculateRowMajorOrder (представлен в Excel 2007)

API C: не поддерживается

Ручной режим

Пересчитывает только ячейки в заданном диапазоне независимо от того, являются ли они грязным или нет. Поведение метода Range.Calculate изменено в Excel 2007; однако старое поведение по-прежнему поддерживается методом Range.CalculateRowMajorOrder .

Режим «Автоматически» или «Автоматически, кроме таблиц»

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

Активное вычисление листов

VBA: ActiveSheet.Calculate

API C: xlcCalculateDocument

Все режимы

Пересчитывает ячейки, отмеченные для вычисления, только на активном листе.

Вычисление указанных листов

VBA: **Worksheets(**reference ). Рассчитать

API C: не поддерживается

В ручном режиме следующий код вызывает пересчет только активного листа.

Повторное создание и принудительный пересчет дерева книги

Клавиши: CTRL+ALT+SHIFT+F9 (появились в Excel 2002)

VBA: **Workbooks(**reference ). ForceFullCalculation (появилась в Excel 2007)

API C: не поддерживается

Все режимы

Указывает Excel заново создать дерево зависимостей и цепочку вычислений для определенной книги и вызывает пересчет всех ячеек, содержащих формулы.

Все открытые книги

VBA: Application.Calculate

API C: xlcCalculateNow

Все режимы

������������� ��� ������, ������� Excel ������� ��� «�������», �� ���� ��������� �� ���������� ��� ���������� ������, � ������, ���������� ���������� ��� «�������». Если выбран режим вычисления «Автоматический, кроме таблиц», этот метод вычисляет таблицы, которые требуют обновления, а также все переменные функции и их зависимости.

Повторное создание и принудительное вычисление дерева всех открытых книг

VBA: Application.CalculateFull

API C: не поддерживается

Все режимы

������������� ��� ������ �� ���� �������� ������. Если выбран режим вычисления «Автоматический, кроме таблиц», выполняется принудительный пересчет таблиц.

Источник

Vba excel пересчет ячейки

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

P. S. Не знаю можно ли на такой вопрос ответить однозначно, но всё-таки, может быть мне «этот Application.Volatile натыкать» везде, во все функции и процедуры?

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

P. S. Не знаю можно ли на такой вопрос ответить однозначно, но всё-таки, может быть мне «этот Application.Volatile натыкать» везде, во все функции и процедуры? Юрий_Нд

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

P. S. Не знаю можно ли на такой вопрос ответить однозначно, но всё-таки, может быть мне «этот Application.Volatile натыкать» везде, во все функции и процедуры? Автор — Юрий_Нд
Дата добавления — 15.06.2018 в 19:57

_Boroda_ Дата: Пятница, 15.06.2018, 20:01 | Сообщение № 4

В процедуры — никакого влияния не окажет
В функции — если они используются на листе, то в зависимости от того, как нужно для них автообновление и насколько они ресурсоемки, если не на листе, а просто вспомогательная функция для какого-то макроса — то не нужно

В процедуры — никакого влияния не окажет
В функции — если они используются на листе, то в зависимости от того, как нужно для них автообновление и насколько они ресурсоемки, если не на листе, а просто вспомогательная функция для какого-то макроса — то не нужно

Скажи мне, кудесник, любимец ба’гов.
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Ответить

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

Источник

Vba excel пересчет ячейки

Как только пересчитать или обновить выбранные ячейки в Excel?

Из-за частого использования сложных формул в Excel многие пользователи Excel склонны менять расчет книги с автоматического расчета на ручной. В ручном режиме вычисления вам необходимо пересчитать ячейки формулы, чтобы получить обновленный результат при изменении значений ссылочных ячеек. В этой статье мы покажем вам, как пересчитать или обновить только выбранные ячейки в Excel.

Предположим, что формулы находятся в диапазоне F2: F10, как показано на скриншоте ниже. После изменения значений в столбце D или E вам необходимо пересчитать ячейки формулы в столбце F, чтобы получить новые результаты. Пожалуйста, сделайте следующее.

1. После изменения значений опорных ячеек выберите ячейки формулы, которые необходимо пересчитать, затем нажмите кнопку F9 ключ. Затем вы можете увидеть, что результаты выбранных ячеек формулы обновляются сразу.

Внимание: После нажатия этой клавиши выреза все формулы на листе, которые меняют ссылочные ячейки, будут обновлены сразу.

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

1. Выберите ячейки формулы, которые необходимо пересчитать, затем нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.

Код VBA: пересчитывать только выбранные ячейки в Excel

3. нажмите F5 для запуска кода, то выбранные ячейки формулы немедленно пересчитываются.

Источник

Adblock
detector

 

Добрый день.  
Имеется код (Из раздела Приемы)  

  Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
       If Not Intersect(Target, Range(«A2:A100»)) Is Nothing Then  
           With Target(1, 2)  
               .Value = Now  
               .EntireColumn.AutoFit  
           End With  
       End If  
End Sub  

  При изменение ячейки A2:A100 в B2:B100 вносится дата изменения, а как быть, если ячейка ссылается на другую. Предположим A2=$C$3, A3=$C$3 и при изменение ячейки C3 измения не будут происходить.  
Спасибо

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Есть такая мысль — взять эти значения в публичный массив (при загрузке книги), и потом при изменении в диапазоне и связанных (precedents) ячейках сравнивать предыдущий и текущий массивы. По результату действовать, обновить предыдщий массив.

 

{quote}{login=Hugo}{date=08.06.2011 06:09}{thema=}{post}Есть такая мысль — взять эти значения в публичный массив (при загрузке книги), и потом при изменении в диапазоне и связанных (precedents) ячейках сравнивать предыдущий и текущий массивы. По результату действовать, обновить предыдщий массив.{/post}{/quote}  
А как будет в виде кода?  
Не силен в VBA (практически 0). Пытаюсь на примерах что-то соорудить (в частности на показанном выше)  
Спасибо

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Что-то вроде… Код в трёх местах :)

 
 

Немного не выходит, может я не так объяснил.  
Вся строчка ссылается на 1 число и при смени 1 числа надо чтобы был пересчет (вносило в той же строке напротив дату). Во вложение я показал как хочется чтобы было.  
Спасибо

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Да, не сумели творчески переработать месиджбокс…  

  Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
   Dim b, i&  
   If Not Intersect(Target, Range(«A2:A100»)) Is Nothing Or Not Intersect(Target, Range(«A2:A100»).Precedents) Is Nothing Then  
       b = Sheets(1).[a2:a100].Value
       For i = 1 To UBound(b)  
           If a(i, 1) <> b(i, 1) Then  
               With Cells(i + 1, 2)  
                   .Value = Now  
                   .EntireColumn.AutoFit  
               End With  
               End If  
           Next  
       a = b  
       End If  
End Sub  

  И ещё — этот код не отслеживает изменение формул, а только значения. Т.е. если вместо =C3 будет написано =C3+D3, но результат не изменится — то код не прореагирует.  
И зря Вы в примере все формулы забили на одну ячейку…

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Hugo}{date=08.06.2011 09:51}{thema=}{post}Да, не сумели творчески переработать месиджбокс…  

  Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
   Dim b, i&  
   If Not Intersect(Target, Range(«A2:A100»)) Is Nothing Or Not Intersect(Target, Range(«A2:A100»).Precedents) Is Nothing Then  
       b = Sheets(1).[a2:a100].Value
       For i = 1 To UBound(b)  
           If a(i, 1) <> b(i, 1) Then  
               With Cells(i + 1, 2)  
                   .Value = Now  
                   .EntireColumn.AutoFit  
               End With  
               End If  
           Next  
       a = b  
       End If  
End Sub  

  И ещё — этот код не отслеживает изменение формул, а только значения. Т.е. если вместо =C3 будет написано =C3+D3, но результат не изменится — то код не прореагирует.  
И зря Вы в примере все формулы забили на одну ячейку…{/post}{/quote}  

  люди добрыяяя) подскажите, переменная Variant в данном случае  

  b = Sheets(1).[a2:a100].Value

  может указывать только на значения? Или, к примеру, на цвет ячейки?

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

На мой взгляд только значения. Но я не добрый.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=Юрий М}{date=08.06.2011 10:54}{thema=}{post}На мой взгляд только значения. Но я не добрый.{/post}{/quote}  

  Благодарю! Вы на себя наговариваете ; )  

  Да, Вы абсолютно правы. «Переменная Variant может принимать значения любого из простых типов». Объект к коим не относиться. А цвет — это свойство объекта…

 

Большое спасибо за помощь, но попытался приблизить данный пример к своей задачи, но так и не вышло.  
Необходимо сделать в VBA формулу C8:C13 и чтобы при изменении ячейки A3 (Соответственно для каждой строки меняется значение в строке D8:D13) делался пересчет C8:C13 в VBA.  
Надеюсь понятно объяснил.  

  Еще вопрос, возможно ли вместо b = Sheets(1).[D8:D13].Value вписать вместо [D8:D13] — Range(«название региона») и вместо Sheets(«Sheet1») ?
Еще вписал значение: Set rng1 = Range(«rng1») — это правильно?  

  Спасибо

 

Вот пиии … Ошибся темой. Как удалить? Извините.

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Разве ошиблись?  
Почти правильно:  

    Private Sub Worksheet_Change(ByVal Target As Range)  

     If Target.Cells.Count > 1 Then Exit Sub  
   Dim b, i&  

               If Not Intersect(Target, [rng1]) Is Nothing Or Not Intersect(Target, [rng1].Precedents) Is Nothing Then
       b = Sheets(1).[D8:D13].Value
       For i = 1 To UBound(b)  
           If a(i, 1) <> b(i, 1) Then  
               With Cells(i + 1, 2)  

                                     .Value = «?????»  

                                     End With  
               End If  
           Next  
       a = b  
       End If  
End Sub  

  Вот только я не понял, куда вопросы планировалось ставить?  
В строке Cells(i + 1, 2) значение i+2 нужно вписать относительно того, какой диапазон берётся в массивы. В первом примере брался с А2, поэтому было +1, тут вероятно нужно With Cells(i + 7, 5)

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Работает даже так, ещё короче код с именованным диапазоном:  

    Private Sub Workbook_Open()  
a = [rng1].Value
End Sub  

  Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
   Dim b, i&  

     If Not Intersect(Target, [rng1]) Is Nothing Or Not Intersect(Target, [rng1].Precedents) Is Nothing Then
       b = [rng1].Value
       For i = 1 To UBound(b)  
           If a(i, 1) <> b(i, 1) Then  
               With Cells(i + 7, 5)  

                     .Value = «?????»  

                 End With  
           End If  
       Next  
       a = b  
   End If  
End Sub

 

Вместо вопросов должна быть формула из ячейки C8 т.е. должно быть умножение ячеек «=B8*D8» в ячейки C8, в ячейки C9 — «=B9*D9» и это все должно меняться при изменение диапазона D9:D13.

 

А нельзя вместо Cells(i + 7, 5) сделать как было в первом примере через    
With Target(1, 2)  
     .Value = Now  
     .EntireColumn.AutoFit  
End With    
Не нравится, что необходимо отсчитывать количество ячеек, а если в будущем что-то поменяется, то будет необходимость опять пересчитывать. Или можно как-то привязвать к определенному региону?  
Спасибо

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Ну тут у Вас Targetом будут и [rng1].Precedents, так что к таргету привязываться нельзя.
Но эато в этом конкретном случае можно так:  

                 With [rng1].Offset(, 1)
                   .Value = «?????»  
               End With  

  Раз уж все вопросы одинаковы.  
А вот насчёт формул не понял — Вы хотите формулы менять, или занести?

 

Guest

Гость

#18

09.06.2011 01:27:12

буду завтра пробовать что предложили. на счет формул: мне их надо не вность, а просто сделать умножение. в примере я показал что на что надо умножить для каждой ячейки. предположим: range(«b8»)*range(«d9»). данное умножение надо сделать в коде VBA. естественно будет как-то по другому (через cells может-не силен пока что, надо почитать чего). соответственно вместо вопросительных знаков должно быть умножение ячеек. надеюсь так более понятно?

Из-за частого использования сложных формул в Excel многие пользователи Excel склонны менять расчет книги с автоматического расчета на ручной. В ручном режиме вычисления вам необходимо пересчитать ячейки формулы, чтобы получить обновленный результат при изменении значений ссылочных ячеек. В этой статье мы покажем вам, как пересчитать или обновить только выбранные ячейки в Excel.

Пересчитывать или обновлять только выбранные ячейки с помощью сочетания клавиш
Пересчитывать или обновлять только выбранные ячейки с кодом VBA


Пересчитывать или обновлять только выбранные ячейки с помощью сочетания клавиш

Предположим, что формулы находятся в диапазоне F2: F10, как показано на скриншоте ниже. После изменения значений в столбце D или E вам необходимо пересчитать ячейки формулы в столбце F, чтобы получить новые результаты. Пожалуйста, сделайте следующее.

1. После изменения значений опорных ячеек выберите ячейки формулы, которые необходимо пересчитать, затем нажмите кнопку F9 ключ. Затем вы можете увидеть, что результаты выбранных ячеек формулы обновляются сразу.

Внимание: После нажатия этой клавиши выреза все формулы на листе, которые меняют ссылочные ячейки, будут обновлены сразу.


Пересчитывать или обновлять только выбранные ячейки с кодом VBA

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

1. Выберите ячейки формулы, которые необходимо пересчитать, затем нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.

Код VBA: пересчитывать только выбранные ячейки в Excel

Public Sub RecalculateSelection()
    If TypeName(Selection) = "Range" Then Selection.Calculate
End Sub

3. нажмите F5 для запуска кода, то выбранные ячейки формулы немедленно пересчитываются.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (1)


Оценок пока нет. Оцените первым!

Пересчет формулы в конкретной ячейке

ASWP

Дата: Суббота, 16.02.2019, 18:18 |
Сообщение № 1

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

Ранг: Форумчанин

Сообщений: 183


Репутация:

24

±

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


Excel 2007

Не обновляется автоматически формула, как это сделать при помощи vba?

Код

=СУММПРОИЗВ((C13=Таблица2[Дата])*(E13<Таблица2[Время конец])*(G13>Таблица2[Время начала]))

Тем более, что нужно уточнение — пересчитать одну формулу, несколько, весь лист, все открытые файлы Excel?
И зачем перед копированием пересчитывать?

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


я знаю что ничего не знаю, но другие не знают и этого

Сообщение отредактировал ASWPСуббота, 16.02.2019, 18:22

 

Ответить

_Boroda_

Дата: Суббота, 16.02.2019, 18:45 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Странно. При каких «определенных» условиях?
Попробуйте так
[vba]

Код

range(«A1»).FormulaLocal=range(«A1»).FormulaLocal

[/vba]
Или так
[vba][/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

ASWP

Дата: Суббота, 16.02.2019, 18:57 |
Сообщение № 3

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

Ранг: Форумчанин

Сообщений: 183


Репутация:

24

±

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


Excel 2007

При каких «определенных» условиях?

При «одновременном» добавлении данных в таблицу. Спасибо, первый вариант подошел, вроде бы работает.


я знаю что ничего не знаю, но другие не знают и этого

Сообщение отредактировал ASWPСуббота, 16.02.2019, 18:57

 

Ответить

I am using all the solutions that appear in:

How to refresh ALL cell through VBA

Getting Excel to refresh data on sheet from within VBA

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True

or

Application.Calculate

or

Application.CalculateFull

None of them works in Excel 2010. When I go to the cell and right click refresh it works. How can I refresh within VBA?

Sheets("Name_of_sheet").Range("D424").Refresh raises an

exception 438

Questions:

  1. How can I make the script support Excel 2003, 2007, 2010?
  2. How can I choose the source file to refresh from using VBA?

EDIT:

  1. I want to simulate a right mouse click and choose refresh in the menu in worksheet 3. That is the entire story.

  2. I work on an Excel file created 10 years ago. When opening in Excel 2010, I can go to a cell and right click on it and choose refresh and then choose the .txt file to refresh from. I am trying to do it automatically within VBA.

Community's user avatar

asked Nov 22, 2012 at 13:39

0x90's user avatar

6

You could try using Application.Calculation

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

answered Nov 22, 2012 at 13:42

Anirudh Ramanathan's user avatar

4

For an individual cell you can use:

Range("D13").Calculate

OR

Cells(13, "D").Calculate

0x90's user avatar

0x90

38.9k36 gold badges163 silver badges244 bronze badges

answered Nov 22, 2012 at 13:46

InContext's user avatar

InContextInContext

2,46112 silver badges24 bronze badges

1

I finally used mouse events and keystrokes to do it:

Sheets("worksheet34").Select
Range("D15").Select
Application.WindowState = xlMaximized
SetCursorPos 200, 600 'set mouse position at 200, 600
Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) 'click left mouse
Application.SendKeys ("R")

answered Nov 29, 2012 at 5:52

0x90's user avatar

0x900x90

38.9k36 gold badges163 silver badges244 bronze badges

2

just a reminder;

be careful when using

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

this sets the entire excel application to calculate formula’s either automatically or manually. If you use

Application.Calculation = xlCalculationManual

you’ll notice your automatic formulas no longer work.

cheers

answered Feb 16, 2016 at 17:53

LeeF's user avatar

You can force excel to recalculate a cell or range of cells by marking the cell/range as dirty.

Example :

' Recalculate Column D4 to D24
Sheets("Name_of_sheet").Range("D4:D24").Dirty

or

' Recalculate Cell D4<br>
Sheets("Name_of_sheet").Range("D4").Dirty<br>

Ike's user avatar

Ike

7,8904 gold badges11 silver badges29 bronze badges

answered Sep 5, 2021 at 11:16

XYZLOL's user avatar

Application.Calculate didn’t work for my function. Not even when followed by DoEvents.

What I found that works is to re-enter the formula in the cell.
A simple way to get the formula is to start recording a macro, use F2 to edit the cell, then press enter. The macro will make a great copy of the function text with all needed quotes.

Below is an example.

Sheets("Name_of_sheet").Range("D424").FormulaR1C1 = "=now()"

svyat1s's user avatar

svyat1s

8689 gold badges12 silver badges21 bronze badges

answered Mar 5, 2021 at 19:36

Scott's user avatar

Cells(x, y).Select
ActiveCell.FormulaR1C1 = Selection.Value

works perfectly for me

answered Aug 2, 2022 at 20:21

user19260138's user avatar

I have a long «macro» in a workbook > 20 MB, tens of thousands of lines, that calls a dll written in Fortran. None of these methods worked:

Call Application.Calculate
Call Application.CalculateFull
Call Application.CalculateFullRebuild
Re-entering the formula
Range.Dirty

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

ThisWorkbook.ActiveSheet.EnableCalculation = False
ThisWorkbook.ActiveSheet.EnableCalculation = True

This worked:

On Error Resume Next
Application.SendKeys "{F2}{Enter}{NumLock}"  'SendKeys turns off NumLock for some reason
On Error GoTo 0

This even worked when a chart was selected.

answered Feb 9 at 14:47

Rocky Scott's user avatar

Rocky ScottRocky Scott

4364 silver badges13 bronze badges

Like this post? Please share to your friends:
  • Vba excel перенос ячейки в другую ячейку
  • Vba excel перенос ячеек
  • Vba excel перенос на новую строку
  • Vba excel перенос на другую строку
  • Vba excel перенос данных с одного листа на другой