答案1
MS Excel 不是这样工作的。一旦你在单元格中输入了某些内容,它就会覆盖其内容。
您可以编写一个宏来执行此操作,如@datatoo 所建议的那样,但是在确定答案时仍然存在单元格值改变的问题,这可能会触发另一个计算。
你为什么要这样做?也许我们可以为你建议一种替代方法。
答案2
任何单元格都可以有公式或值,但不能同时有两者,这就是 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
注意:
- 将此代码复制并粘贴为标准模块。
Range("A:A")
是可编辑的,也应该Rage("A:C")
或甚至Range("A1:C10")
也是。
答案3
只有使用 VBA 并监听工作表_更改事件。
尝试下面的代码,我添加了信息性注释,希望您能了解它是如何工作的。
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
笔记:此代码必须进入工作表本身,而不是模块中。
编辑:来自评论的步骤。
- 进入开发人员选项卡。
- 点击Visual Basic按钮打开,
- 在弹出的 Visual Basic 窗口中查看项目-VBAProject窗格(位于窗口左侧),
- 找到您的工作表,双击它,
- 粘贴上述代码,保存您的工作簿。