1

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

Пример: либо непосредственно введите число в ячейку A4, либо укажите значение A4 = A2 + A3

Я не хочу перезаписывать формулу, если используется прямой ввод с клавиатуры.

Спасибо, надеюсь, это проясняет.

2 ответа2

3

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

Следующий код работает в этих помещениях:

  • либо ячейка A2 или A3 меняются
  • Оба A2 и A3 должны иметь значения

Таким образом, когда редактируются либо A2, либо A3 И обе ячейки содержат значение, макрос записывает = A2+A3 в ячейку A4. Если любое из значений в A2 или A3 является текстовым, макрос все равно будет запущен, и в Excel отобразится сообщение об ошибке при добавлении текста с номерами. Используйте Sum(), чтобы избежать сообщения об ошибке.

Если ячейка A4 затем редактируется, а формула перезаписывается, это значение будет отображаться до тех пор, пока A2 или A3 не будут отредактированы снова.

Если это не соответствует вашим требованиям, пожалуйста, изложите их более подробно.

Код поступает в модуль Sheet (щелкните правой кнопкой мыши вкладку листа, нажмите "View code", вставьте код в большую область кода).

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A2:A3")) Is Nothing Then
    If WorksheetFunction.Count(Range("A2:A3")) = 2 Then
        Range("A4").Formula = "=A2+A3"
    End If
End If

End Sub
0

VBA может сделать это, он должен быть в рабочем листе VBA и может потребоваться некоторая настройка

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    With Target
        If .Count = 1 Then
            If .Column = 4 And .Row = 1 Then
                If IsEmpty(.Value) And .Offset(-1) <> "" AND .Offset(-2) <> "" Then
                    Application.EnableEvents = False
                    .FormulaR1C1 = "=A2+A3"
                    Application.EnableEvents = True
                End If
            End If
        End If
    End With
End Sub

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