![如何使易变的 Excel 公式变为静态的,特别是包含 TODAY 函数的公式?](https://linux22.com/image/1551482/%E5%A6%82%E4%BD%95%E4%BD%BF%E6%98%93%E5%8F%98%E7%9A%84%20Excel%20%E5%85%AC%E5%BC%8F%E5%8F%98%E4%B8%BA%E9%9D%99%E6%80%81%E7%9A%84%EF%BC%8C%E7%89%B9%E5%88%AB%E6%98%AF%E5%8C%85%E5%90%AB%20TODAY%20%E5%87%BD%E6%95%B0%E7%9A%84%E5%85%AC%E5%BC%8F%EF%BC%9F.png)
我有一个在工作中创建的任务日志,用于对我每天要做的事情进行优先排序。
在一列中,我添加了一个公式,根据我是否将任务分配为紧急或不紧急、重要或不太重要(填充为1
、2
或)来自动计算 Covey 象限数字。我还有一列用于分配截止日期。我想自动分配截止日期,并且我编写了一个公式来执行此操作,但该函数意味着明天我的截止日期将会改变。以下是我希望实现的目标:3
4
TODAY
- 我希望根据 G 列的象限和今天的日期自动计算到期日。
- 我希望明天打开工作簿时截止日期保持不变。
- 当我明天输入新任务时,我希望使用 TODAY 函数自动再次计算截止日期,然后在第二天再次保持不变,依此类推。
我已经在网上疯狂研究这个主题一段时间了,但毫无结果。我发现很多建议使用 CTRL+ 自动将今天的日期输入到单元格中,但这不是我想要的。
请查看下面的公式,并告诉我是否有任何方法可以实现我的目标,宏、vba、公式或其他。请在您的指示中提供非常详细的信息,因为我刚刚学习宏和 vba。
=IF(ISBLANK(E4),"",IF([@QUADRANT]=1, TODAY()+1,IF([@QUADRANT]=2, TODAY()+7,IF([@QUADRANT]=3, TODAY()+3, IF([@QUADRANT]=4, TODAY()+30)))))
答案1
为了实现这一目标,我想建议两种解决方案。
解决方案 1:
使用这些 VBA 代码作为模块。第一的将在保存工作簿时将单元格 A1 中的当前日期转换为静态日期值,并且第二宏将把静态日期值转换为易失性日期值。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With Sheet1.Range("A1")
.Value = .Value
End With
End Sub
Private Sub Workbook_Open()
With Sheet1.Range("A1")
.Value = "=Today()"
End With
End Sub
解决方案 2:
您可以创建一个切换按钮将易失性日期转换为静态日期,然后再次转换为易失性日期值。
Private Sub CommandButton1_Click()
If CommandButton1.Caption = "Convert Static" Then
With Sheet1.Range("A1")
.Value = .Value
End With
CommandButton1.Caption = "Convert Volatile"
ElseIf CommandButton1.Caption = "Convert Volatile" Then
With Sheet1.Range("A1")
.Value = "=Today()"
End With
CommandButton1.Caption = "Convert Static"
End If
End Sub
注意:按照以下步骤完成作业。
- 在执行公式的工作表 1 中,在单元格 A1 中写入此公式 = Today()。
- 对于解决方案 1,按Alt+F11打开VBA编辑器,找到“Microsoft Excel 对象”。
- 右键单击它,找到插入,然后找到模块。
- 复制并粘贴两个宏。
对于解决方案 2, 按着这些次序。
- 在工作表 1 中,单击开发人员选项卡,找到设计模式,左边是插入。
- 找到ActiveX控件,第一个是命令按钮,单击它并在空白区域绘制按钮。
- 右键单击命令按钮,查找属性,查找标题并将其更改为转换静态。
- 返回 Sheet,双击 Command 按钮,VBA 编辑器将打开。
- 复制并粘贴 VBA 代码,转到文件菜单,点击关闭并返回 Excel。
- 再次单击顶部的“设计”按钮将其停用。
- 单击命令按钮,将单元格 A1 中的易失性日期值更改为静态,并将命令按钮的标题也更改为转换易失性。
- 当您想要将单元格值 A1 更改为静态时,再次单击它。
请记住,每次单击时,宏都会将 A1 单元格中的日期从易失性转换为静态,再转换为易失性。
笔记, 在您的公式中使用单元格 A1 而不是 TODAY()。
您可以自由地在任何空白单元格中写入 =Today() 公式,但不要忘记相应地修改单元格地址。
我确信这对你有帮助。