Обновление любой ячейки из формулы в Excel 2010

Скажем, у меня есть формула: V = IR

В Excel мне нужно рассчитать любую из возможных комбинаций.

Например,

  • если мне присваивается значение I и R, мне нужно будет отобразить результат V в ячейке, в которой у меня есть V (пользователь держит ее 0 или пустой, чтобы обозначить это значение, которое он хочет узнать)

Лист Excel:

 +------+---------+------+ | V | I | R | +------+---------+------+ | 0 | 1 | 10 | +------+---------+------+ 

Лист Excel после:

 +------+---------+------+ | V | I | R | +------+---------+------+ | 10 | 1 | 10 | +------+---------+------+ 
  • если мне присваивается значение V и R, мне нужно будет отобразить результат I в ячейке, в которой у меня есть (пользователь держит его 0 или пустым, чтобы обозначить, что это значение, которое он хочет узнать)

Лист Excel:

 +------+---------+------+ | V | I | R | +------+---------+------+ | 10 | 0 | 10 | +------+---------+------+ 

Лист Excel после:

 +------+---------+------+ | V | I | R | +------+---------+------+ | 10 | 1 | 10 | +------+---------+------+ 

Кодирование функции для проверки, является ли ячейка 0 и обновление другой ячейки ответа (кроме V, I, R, эта ячейка вызывает эту функцию явно), и ожидаемое значение не является проблемой.

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

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

Как это сделать?

Я дам вам подсказку о том, как это осуществить …: ^) Вместо того, чтобы пытаться ввести формулу в ячейках, напишите сценарий VBA, который определяет, какая из трех перестановок вашей формулы применять при заданном V = IR, на основе которого ячейка пуста. Итак, ваша первая часть вашей логики будет выглядеть примерно так:

 if cellV == "" and cellI <> "" and cellR <> "" then cellV = cellI * cellR elseif cellV <> "" and cell I = "" and cellR <> "" then cellI = cellV/cellR elseif cellV <> "" and cell I<> "" and cellR = "" then cellR = cellV/cellR else alert("must provide at least two out of three values before evaluation"); 

и приложите это к любому событию, которое вам нравится. например, событие, которое проверяет, указано ли 2 из 3 значений (например, onUpdate или что-то еще)

Пожалуйста, знайте, что это всего лишь псевдокод.

Насколько мне известно, для Excel нет единственного решения. Вам придется использовать VBA.

Это сработало для меня:

 Option Explicit Sub Electricity() Dim nEmptyCells As Integer nEmptyCells = -CInt(IsEmpty(Range("Voltage"))) _ - CInt(IsEmpty(Range("Current"))) _ - CInt(IsEmpty(Range("Resistance"))) If nEmptyCells = 1 Then If IsEmpty(Range("Voltage")) Then 'Calculate voltage Range("Voltage") = Range("Current") * Range("Resistance") ElseIf IsEmpty(Range("Current")) Then 'Calculate current Range("Current") = Range("Voltage") / Range("Resistance") ElseIf IsEmpty(Range("Resistance")) Then 'Calculate resistance Range("Resistance") = Range("Voltage") / Range("Current") End If Range("Notification") = "Calculation successful." ElseIf nEmptyCells > 1 Then Range("Notification") = "Insufficient input." ElseIf nEmptyCells < 1 Then Range("Notification") = "Too much input. Problem is overspecified." End If End Sub 

Обратите внимание, что я дал имена ячейкам, соответствующим V, R и I, а также ячейке «Уведомление», которая даст полезную обратную связь пользователю. Если вы не хотите давать им имена, вы можете просто использовать, например, "B2" вместо « Voltage" и т. Д. Также я проверял только пустые ячейки, а не на нулевые значения. Я оставлю эту часть вам.

Вышеуказанный макрос принадлежит модулю кода и должен запускаться вручную. Вы можете разместить CommandButton на листе и заставить его запускать макрос при нажатии пользователем. В качестве альтернативы, если вы хотите, чтобы он запускался автоматически каждый раз, когда пользователь меняет входы, вы можете поместить его в модуль листа:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("Voltage").Address _ Or Target.Address = Range("Current").Address _ Or Target.Address = Range("Resistance").Address Then Electricity End If End Sub 

Это то, что я думал о манжете. С немного дополнительной работой вы можете сделать ее более приятной и удобной для пользователя.

Interesting Posts

VBA Vlookup на переменные рабочие книги не работает

C # VSTO Excel 2007 – отключить скрытую / скрытую кнопку

Вставить строку каждые X строк в excel

Редактирование вставленного изображения в текстовом документе с использованием c # interop

Использование переменной диапазона в нескольких листах

Слияние нескольких строк из одного столбца, разделенных нечетными данными строки в другом столбце

Как связать два листа (по диапазону дат) для использования в сводной таблице

Проблема с кодировкой UTF- / csv для excel

Excel VBA – Применить автоматический фильтр и Сортировать по определенному цвету

Импорт таблицы доступа в таблицу Excel без первой записи, являющейся меткой поля доступа

Проверьте, есть ли в файле Excel «Защита листа» или «Пользовательские определенные свойства в ячейках»

как преобразовать список в обратном порядке на листе excel

Преобразование футов-дюймов в дюймы Excel

Найдите и выделите повторяющиеся записи в excel

Как сделать сопоставление файла excel с помощью c #

Давайте будем гением компьютера.