Вы можете сделать это с помощью макроса события листа:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
If Intersect(Target, Range("B1:C1")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Not Intersect(Target, Range("B1")) Is Nothing Then
[C1] = [A1] * [B1]
Else
[B1] = [C1] / [A1]
End If
Application.EnableEvents = True
End Sub
Если вы обновите B1, макрос обновит C1 до согласованности.
Если вы обновите C1, макрос обновит B1, чтобы он был согласованным.
Если вы обновите A1, макрос будет ждать, пока вы также обновите B1 или C1, прежде чем вносить изменения.
Поскольку это код рабочего листа, его очень легко установить и использовать автоматически:
- щелкните правой кнопкой мыши имя вкладки в нижней части окна Excel
- выберите View Code - откроется окно VBE
- вставьте материал и закройте окно VBE
Если у вас есть какие-либо проблемы, сначала попробуйте на пробную версию.
Если вы сохраните книгу, макрос будет сохранен вместе с ней.
Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx
Чтобы удалить макрос:
- вызвать окна VBE, как указано выше
- очистить код
- закройте окно VBE
Чтобы узнать больше о макросах в целом, смотрите:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
а также
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
Чтобы узнать больше о макросах событий (код листа), см .:
http://www.mvps.org/dmcritchie/excel/event.htm
Макросы должны быть включены, чтобы это работало!
EDIT # 1:
Вот новый код. TbSize
- количество строк в таблице из трех столбцов.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TbSize As Long, rng As Range, roww As Long
TbSize = 100
Set rng = Range("A1:C" & TbSize)
If Target.Count <> 1 Then Exit Sub
If Intersect(Target, rng) Is Nothing Then Exit Sub
roww = Target.Row
Application.EnableEvents = False
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Range("C" & roww) = Range("A" & roww) * Range("B" & roww)
ElseIf Not Intersect(Target, Range("C:C")) Is Nothing Then
Range("B" & roww) = Range("C" & roww) / Range("A" & roww)
Else
Range("C" & roww) = Range("A" & roww) * Range("B" & roww)
End If
Application.EnableEvents = True
End Sub