1

Изображение 1

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

Если я введу 14 в D20 я получу 2426.67 в результате.

Формула имеет вид (((inputed value) * (40) * (52)) / (12))

  • 40 часов в неделю
  • 52 недели в году
  • 12 ежемесячно

Является ли это возможным?

3 ответа3

1

MS Excel не работает таким образом. Когда вы вводите что-то в ячейку, она перезаписывает содержимое.

Вы можете написать макрос для этого, как предлагает @datatoo, однако у вас все еще остается проблема изменения значений ячейки при определении ответа, что может вызвать другой расчет.

почему ты хочешь сделать это? Может быть, мы можем предложить альтернативный метод для вас.

1

Любая ячейка может иметь либо формулу, либо значение, но не оба. Вот как в основном работает Excel.

Теперь, чтобы получить то, что вы описываете, вам понадобится VBA (Макрос), чтобы выполнить вычисление при изменении значения ячейки.

Код VBA, который я предлагаю, немного импровизированный, и он работает на весь столбец или на любой конкретный диапазон данных, а не только на ячейку, также защищает от нецифровых данных.

Private Sub Worksheet_Change(ByVal Target As Range)

 If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
 If IsNumeric(Target.Value) Then

   Application.EnableEvents = False
     Target = (Target * 40 * 52) / 12
      Application.EnableEvents = True
 Else
         MsgBox ("Only calculate numeric values")
 End If

End Sub

NB

  • Скопируйте и вставьте этот код как стандартный модуль.
  • Range("A:A") является редактируемым и должен также Rage("A:C") или даже Range("A1:C10") .
0

Это возможно только при использовании VBA и прослушивании события Worksheet_Change .

Попробуйте приведенный ниже код, я добавил информативные комментарии в надежде, что вы узнаете, как он работает.

Private Sub Worksheet_Change(ByVal Target As Range)
    ' The below If statement uses Intersect to check, 
    ' if the cell being changed is NOT cell D20 it gets ignored.
    If Not Intersect(Target, Target.Worksheet.Range("D20")) Is Nothing Then
        Application.EnableEvents = False 'Disables events to prevent endless loop

        On Error GoTo Finalise 'Re-enable events

        ' The below code gets the value from cell D20,
        ' and stores the value to the inputVal variable.
        inputVal = Range("D20").Value 

        ' The below code does your calculation, 
        ' and stores the value to the newValue variable.
        newValue = (inputVal * 40 * 52) / 12 

        'Changes the value in cell D20 to the value of the newValue variable. 
        Range("D20").Value = newValue 
    End If

Finalise:
    Application.EnableEvents = True
End Sub

Примечание . Этот код должен входить в сам лист, а не в модуль.

Изменить: Шаги от комментария.

  1. Перейдите на вкладку разработчика.
  2. Нажмите на кнопку Visual Basic , чтобы открыть,
  3. В всплывающем окне Visual Basic посмотрите на панель Project - VBAProject (в левой части окна),
  4. Найдите свой рабочий лист, дважды щелкните по нему,
  5. Вставьте указанный выше код, сохраните свою книгу.

Шаги от комментария

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