是否可以在 Excel 单元格中输入一个值并让同一个单元格输出结果?

是否可以在 Excel 单元格中输入一个值并让同一个单元格输出结果?

图片 1

基本上,我希望能够将工资率(例如:输入“14”表示每小时 14 美元)输入到已经有公式的单元格中以获得结果(在同一个单元格中)。

如果我输入 14,D20我将得到2426.67结果。

公式是(((inputed value) * (40) * (52)) / (12))

  • 每周 40 小时
  • 52 是一年的周数
  • 12 是每月

是否可以?

答案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

笔记:此代码必须进入工作表本身,而不是模块中。

编辑:来自评论的步骤。

  1. 进入开发人员选项卡
  2. 点击Visual Basic按钮打开,
  3. 在弹出的 Visual Basic 窗口中查看项目-VBAProject窗格(位于窗口左侧),
  4. 找到您的工作表,双击它,
  5. 粘贴上述代码,保存您的工作簿。

来自评论的步骤

相关内容