Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 以当前日期为准_Excel_Date_If Statement_Formula - Fatal编程技术网

Excel 以当前日期为准

Excel 以当前日期为准,excel,date,if-statement,formula,Excel,Date,If Statement,Formula,我有两个单元格A1和A2。我想要的是,如果A2的值大于零(0),则A1采用当前日期mm/dd/yyyy。为此,我在A1中使用了以下公式: =IF(E2>0;(TODAY())) 因此,如果A2中的单元格是例如60,则A1将是11/03/2015。 如果我保存并在第二天重新打开,A1中的值将自动更改为新日期。这是我不喜欢的,因为我想用这种方法来记录我每天的开支。因此,如果我在A2中键入一个金额,我希望A1给我当前日期并保留它 那么,如何才能获得当前日期,而不用担心每次重新打开文件时它们都会

我有两个单元格A1A2。我想要的是,如果A2的值大于零(0),则A1采用当前日期mm/dd/yyyy。为此,我在A1中使用了以下公式:

=IF(E2>0;(TODAY()))
因此,如果A2中的单元格是例如60,则A1将是
11/03/2015
。 如果我保存并在第二天重新打开,A1中的值将自动更改为新日期。这是我不喜欢的,因为我想用这种方法来记录我每天的开支。因此,如果我在A2中键入一个金额,我希望A1给我当前日期并保留它


那么,如何才能获得当前日期,而不用担心每次重新打开文件时它们都会更改?

您要查找的是宏,而不是公式。我假设您正在对列而不是行执行此操作。例如:A1和B1,而不是A1和A2

有什么区别

宏:可在事件上触发一次

公式:给定一个输入,它会不断地重新评估结果

步骤1)按Alt+F11,这将在VBA中打开代码编辑器

步骤2)将下面的代码复制并粘贴到公式所在的“工作表”中

步骤3)将工作簿另存为启用宏的电子表格。(xlsm)

注意:此宏仅在一次修改一行时执行,您可以通过删除第一个“if”语句的“Target.Rows.Count=1”部分将其更改为在多个单元格上工作

注2:如果希望在对第2列进行更改时重新计算日期,则可以删除最后一个嵌套的“if”语句。(又名B列,在VBA中,列通过数字而不是字母引用)


注3:如果您确实需要它通过行工作,请尝试通过使用调试器单步执行该宏并重新构建它来理解该宏。键入行而不是列。

您必须使用VBA。正如您所注意到的,在任何地方使用
=Today()
都会更新到文件打开的当天。使用VBA,您可以拥有一个宏,该宏等待列a更改,然后获取结果并将值粘贴到其上。尝试在宏记录器中执行此操作(执行公式、复制和粘贴值),然后发回任何想法。老实说,我不熟悉VBA。你能给我更多关于如何做的信息吗?也许是一篇文章,这样我就可以读到它了?提前感谢您的帮助。@pnuts A1和A2是列!!不是细胞。。。一个单元格由行和列的名称共同决定!!!谢谢你的意见。我会让你知道这一点:)非常感谢。
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