Здравствуйте. Все никак не могу решить, казалось бы, простую задачу. Есть три столбца: Сумма, скидка и сумма со скидкой. Сумма со скидкой равняется Сумма минус Скидка. Скидка равняется Сумма минус Сумма со скидкой. И т.д. Получились цикличесские ссылки - поставил галочку напротив Включить интеративные вычисления. Например если я ввожу данные, то все считается. Но, при этом стираются формулы при вводе данных. Т.е. если я захочу что-то после изменить, то уже не получится. Как сделать такую формулу, чтобы расчет мог производиться из полученных любых двух значений и потом эти значения можно было бы потом корректировать. Заранее всем спасибо!!!
Здравствуйте. Все никак не могу решить, казалось бы, простую задачу. Есть три столбца: Сумма, скидка и сумма со скидкой. Сумма со скидкой равняется Сумма минус Скидка. Скидка равняется Сумма минус Сумма со скидкой. И т.д. Получились цикличесские ссылки - поставил галочку напротив Включить интеративные вычисления. Например если я ввожу данные, то все считается. Но, при этом стираются формулы при вводе данных. Т.е. если я захочу что-то после изменить, то уже не получится. Как сделать такую формулу, чтобы расчет мог производиться из полученных любых двух значений и потом эти значения можно было бы потом корректировать. Заранее всем спасибо!!!kontrabasss
Круто. Я не очень силен в этом, но получилось просто скопировать и вставить в другом листе с другими ячейками. Буду пока пробовать так. Но, если вдруг есть какие варианты попроще - буду очень признателен. Спасибо.
Круто. Я не очень силен в этом, но получилось просто скопировать и вставить в другом листе с другими ячейками. Буду пока пробовать так. Но, если вдруг есть какие варианты попроще - буду очень признателен. Спасибо.kontrabasss
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "A2" Then Range("C2") = Target.Value - Range("B2") If Target.Address(0, 0) = "B2" Then Range("C2") = Range("A2") - Target.Value If Target.Address(0, 0) = "C2" Then Range("B2") = Range("A2") - Target.Value End Sub
[/vba]Worksheet_Change это событие (изменение на листе), при котором автоматически запускается макрос. Target.Address(0, 0) это адрес ячейки где событие произошло Target.Value это измененное значение. Далее делаем проверку (if) адреса ячейки, которую изменили. По результату проверки выбираем действие, что из чего вычитаем и куда заносим.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "A2" Then Range("C2") = Target.Value - Range("B2") If Target.Address(0, 0) = "B2" Then Range("C2") = Range("A2") - Target.Value If Target.Address(0, 0) = "C2" Then Range("B2") = Range("A2") - Target.Value End Sub
[/vba]Worksheet_Change это событие (изменение на листе), при котором автоматически запускается макрос. Target.Address(0, 0) это адрес ячейки где событие произошло Target.Value это измененное значение. Далее делаем проверку (if) адреса ячейки, которую изменили. По результату проверки выбираем действие, что из чего вычитаем и куда заносим.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "A2" Then Range("C2") = Target.Value - Range("B2") If Target.Address(0, 0) = "B2" Then Range("C2") = Range("A2") - Target.Value If Target.Address(0, 0) = "C2" Then Range("B2") = Range("A2") - Target.Value End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "A2" Then Range("C2") = Target.Value - Range("B2") If Target.Address(0, 0) = "B2" Then Range("C2") = Range("A2") - Target.Value If Target.Address(0, 0) = "C2" Then Range("B2") = Range("A2") - Target.Value End Sub
Алексей, так ты в бесконечный цикл провалишься_Boroda_
А на моем старом ПК зацикливание было таким незаметным.[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address(0, 0) = "A2" Then Range("C2") = Target.Value - Range("B2") If Target.Address(0, 0) = "B2" Then Range("C2") = Range("A2") - Target.Value If Target.Address(0, 0) = "C2" Then Range("B2") = Range("A2") - Target.Value Application.EnableEvents = True End Sub
[/vba]
А на моем старом ПК зацикливание было таким незаметным.[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address(0, 0) = "A2" Then Range("C2") = Target.Value - Range("B2") If Target.Address(0, 0) = "B2" Then Range("C2") = Range("A2") - Target.Value If Target.Address(0, 0) = "C2" Then Range("B2") = Range("A2") - Target.Value Application.EnableEvents = True End Sub
Большое всем спасибо. Методом научного тыка я, вроде, разобрался, как это сделать. Но! Возникла следующая проблема. Если я в ячейке A2 вбиваю все руками, то все просчитывается нормально. Но если ячейка А2 рассчитывается автоматически, то остальные столбцы не меняются...
Большое всем спасибо. Методом научного тыка я, вроде, разобрался, как это сделать. Но! Возникла следующая проблема. Если я в ячейке A2 вбиваю все руками, то все просчитывается нормально. Но если ячейка А2 рассчитывается автоматически, то остальные столбцы не меняются...kontrabasss
Но если ячейка А2 рассчитывается автоматически, то остальные столбцы не меняются
Тогда так[vba]
Код
Private Sub Worksheet_Calculate() Application.EnableEvents = False Range("C2") = Range("A2") - Range("B2") Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address(0, 0) = "B2" Then Range("C2") = Range("A2") - Target.Value If Target.Address(0, 0) = "C2" Then Range("B2") = Range("A2") - Target.Value Application.EnableEvents = True End Sub
Но если ячейка А2 рассчитывается автоматически, то остальные столбцы не меняются
Тогда так[vba]
Код
Private Sub Worksheet_Calculate() Application.EnableEvents = False Range("C2") = Range("A2") - Range("B2") Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address(0, 0) = "B2" Then Range("C2") = Range("A2") - Target.Value If Target.Address(0, 0) = "C2" Then Range("B2") = Range("A2") - Target.Value Application.EnableEvents = True End Sub
AlexM, спасибо. Опять научным тыком, почти не осознавая, что я делаю воткнул это в свою таблицу. Мне это нужно для расчета сторон, высот, углов геометрических фигур. ))) Там много используется тригонометрических формул Excel. Например можно построить треугольник по трем сторонам, а можно по двум и углу между ними. Может подскажете, какая функция у Range?
AlexM, спасибо. Опять научным тыком, почти не осознавая, что я делаю воткнул это в свою таблицу. Мне это нужно для расчета сторон, высот, углов геометрических фигур. ))) Там много используется тригонометрических формул Excel. Например можно построить треугольник по трем сторонам, а можно по двум и углу между ними. Может подскажете, какая функция у Range?kontrabasss