我有两个单元格 A1 和 A2 。如果A2的值大于零(0),我想要的是 A1 获取当前日期mm / dd / yyyy。为此,我在A1中使用了以下公式:
=IF(E2>0;(TODAY()))
因此,如果A2中的单元格例如 60 ,则A1将为11/03/2015
。
如果我保存并在第二天重新打开它,A1中的值将自动更改为新日期。这是我不喜欢的东西,因为我想用这种方法来记录我每天的开支。因此,如果我在A2中输入金额,我希望A1给我当前日期并保留它。
那么如何才能获得当前日期而不必担心每次重新打开文件时都会更改?
答案 0 :(得分:1)
您正在寻找的是宏,而不是公式。我假设你在COLUMNS而不是ROWS上执行此操作。 EG:A1和B1,不是A1和A2。
有什么区别?
宏:可以在某个事件上触发一次。
公式:给定输入,它会不断重新评估结果。
步骤1)按Alt + F11,这将打开VBA中的代码编辑器。
步骤2)将下面的代码复制并粘贴到公式所在的“工作表”中。
步骤3)将工作簿另存为启用宏的电子表格。 (XLSM)。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
If (Target.Columns.Count = 1 And Target.Column = 2 And Target.Rows.Count = 1) Then
'Check every row, currently this will get executed once
For Each cell In Target.Cells
'Make sure the value is a number
If (IsNumeric(cell.Value)) Then
'Make sure the value is greater than 0
If (cell.Value > 0) Then
'Check to make sure the date column is empty, so it only ever gets written once
'Note: You can remove the if statement below, if you want it to get re-evaluated every time you make a change
If (Target.Worksheet.Cells(cell.row, 1).Value = "") Then
'Using the current modified row, set column 1 to Today
'Note: Now() is the same as Today in VBA
Target.Worksheet.Cells(cell.row, 1).Value = Now()
End If
End If
End If
Next cell
End If
End Sub
注意:如果您一次修改一行,则只会执行此宏,您可以通过删除FIRST'if'语句中的'Target.Rows.Count = 1'部分来更改它以在多个单元格上工作。< / p>
注意2:如果您希望在对第2列进行更改时重新评估日期,则可以删除最后一个嵌套的“if”语句。(也就是列B,在VBA列中通过数字引用,而不是字母引用)。
注意3:如果你真的需要它通过行工作,尝试通过调试器逐步完成它来理解这个宏,并重新构建它。键入行而不是列。