Подскажите пожалуйста как сделать чтобы ячейка плюсовала содержимое другой ячейки к своему
Пример
B1: A1+B1
число итераций ставлю =1
Она плюсует, только когда ввожу данные в другие ячейки формула пересчитывает значение и ещё раз добавляет значение A1. пробовал ставить $ перед А1 и В1 не помогает.
Кто знает пожалуйста подскажите.
не работает циклическая ссылка в EXCEL
Модератор: Naeel Maqsudov
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Это происходит по тому, что любое изменение на листе приводит к возникновению события Calculate. В течение этого события происходят перерасчеты формул, и итерационных с том числе.
Если нужно, чтобы прибавила и больше никогда не пересчитывала, то не нужно использовать формулы. Или введя формулу затем с помощью копирования и меню Правка\Специальная вставка замените формулу результатом.
Если нужно, чтобы значение А1 прибавлялось к B1 только при вводе A1, то нужно в VBA в модуле этого листа написать макрос-обработчик события Change. В этом обработчике проверить, если Target.Address = $A$1, то сделать
[b1] = [b1] + Target.Value
Если нужно, чтобы прибавила и больше никогда не пересчитывала, то не нужно использовать формулы. Или введя формулу затем с помощью копирования и меню Правка\Специальная вставка замените формулу результатом.
Если нужно, чтобы значение А1 прибавлялось к B1 только при вводе A1, то нужно в VBA в модуле этого листа написать макрос-обработчик события Change. В этом обработчике проверить, если Target.Address = $A$1, то сделать
[b1] = [b1] + Target.Value
И не поможет. Признак абсолютной ссылки не влияет на процесс вычисления. Он влияет только на процесс копирования этой формулы в другие ячейки. Абсолютные части адреса остаются неизменными, а относительные меняются так, чтобы влияющие ячейки как бы "проследовали" поступательно за формулой.пробовал ставить $ перед А1 и В1 не помогает
Если у Вас наличествует циклическая ссылка, то ввод данных в любую ячейку рабочего листа вызывает пересчёт всех формул (при условии, что у Вас не установлен ручной режим вычислений), поэтому циклическая ссылка работает, но только не так, как Вы рассчитывали.
Для решения Вашей задачи можно использовать макросы, а точнее сказать события, которые помогут Вам обойтись, без использования циклической ссылки :
Любой из двух вышеопубликованных кодов нужно расположить в модуле того рабочего листа, в котором Вы хотите производить нужные манипуляции. Для этого можно выделить ярлычок нужного рабочего листа, нажать на правую кнопку мышки и в появившемся контекстном меню выбрать команду Исходный текст
P.S. Надеюсь, что Naeel Maqsudov не обидится за некоторый повтор с моей стороны, но свой вариант ответа я написал автономно, а редактировать уж очень не хочется.
Для решения Вашей задачи можно использовать макросы, а точнее сказать события, которые помогут Вам обойтись, без использования циклической ссылки :
Код: Выделить всё
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" Then
If IsNumeric(Target.Value) And IsNumeric(Target.Next.Value) Then
Application.EnableEvents = False
Target.Next.Value = Target.Next.Value + Target.Value
Application.EnableEvents = True
End If
End If
End Sub
Код: Выделить всё
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" Then
With Target
If IsNumeric(.Value) And IsNumeric(.Next.Value) Then
.Application.EnableEvents = False
.Next.Value = .Next.Value + .Value
.Application.EnableEvents = True
End If
End With
End If
End Sub
P.S. Надеюсь, что Naeel Maqsudov не обидится за некоторый повтор с моей стороны, но свой вариант ответа я написал автономно, а редактировать уж очень не хочется.
Большое спасибо за совет, только как быть если мне надо чтоб те же манипуляции проделывались с C1 и D1, A2 и B2 и т. д.
А ещё лучше, чтобы складывала А1(А2), В1(В2), С1(С2) и каждый раз выводила результат в D1(D2)
А ещё лучше, чтобы складывала А1(А2), В1(В2), С1(С2) и каждый раз выводила результат в D1(D2)
IMHO Лучше сначала определиться с тем, какие же именно ячейки Вам нужно суммировать ... должны ли это быть вполне конкретные ячейки или все ячейки в определённых столбцах и т.п.
Мне надо чтобы построчно суммировались(так же как А1 и В1) все значения в столбцах C и D, F и G, I и J
Один из возможных вариантов решения Вашего вопроса, заключается в замене :
на :
P.S. Если существует вероятность, что изменение данных будет происходить не в одной отдельно взятой ячейке, а в целом диапазоне, то макрос нужно будет немного изменить.
Код: Выделить всё
If Target.Address = "$A$1" Then
…
End If
Код: Выделить всё
Select Case Target.Column
Case 1, 3, 6, 9
…
End Select