3

Я имею ячейку A1, отформатированную как валюта (например, EUR) - в которой я вручную вводю базовое значение - например, 1000 EUR, из которых я хочу сделать дальнейшие вычисления в ячейках B1 и C1. Ячейка B1 отформатирована в процентах (например, 20%). Ячейка C1 отформатирована в формате валюты (EUR), в котором я хочу рассчитать абсолютное значение в EUR (20% от 1000 евро = 200 евро).

Однако я хочу сделать так, чтобы ячейки B1 и C1 были связаны друг с другом, наоборот, с соответствующими формулами, чтобы в каждую ячейку (B1 или C1) я вводил значение, в другой - автоматически обновлял свой результат, и наоборот.

Например, в случае, если у меня есть 1000 евро в ячейке A1, а) если я введу 20% в ячейке B1, C1 должен показать результат = 200 евро, и наоборот, b) когда я введу 200 евро в ячейке C1, B1 должен показать результат в 20%.

Подскажите, пожалуйста, как сделать эту работу? Я думаю, что есть некоторый необходимый код (VBA). Большое спасибо, Душан

1 ответ1

2

Вы можете сделать это с помощью макроса события листа:

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, прежде чем вносить изменения.

Поскольку это код рабочего листа, его очень легко установить и использовать автоматически:

  1. щелкните правой кнопкой мыши имя вкладки в нижней части окна Excel
  2. выберите View Code - откроется окно VBE
  3. вставьте материал и закройте окно VBE

Если у вас есть какие-либо проблемы, сначала попробуйте на пробную версию.

Если вы сохраните книгу, макрос будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx

Чтобы удалить макрос:

  1. вызвать окна VBE, как указано выше
  2. очистить код
  3. закройте окно 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .