PAYATHON 2026

Excel 中如何在填写买家后自动记录并固定当天日期?

数据小陈

填写买家后,如果要保留录入当天的销售日期,需要将日期写成固定值。TODAY() 在工作表重新计算时会返回当前日期,普通的 IF 嵌套无法记住首次录入的日期。要自动记录,可以在支持 VBA 的桌面版 Excel 中使用 Worksheet_Change 事件。

为什么已有日期会变成今天?

你的工作表用 A 列记录销售日期,B 列记录买家。从贴出的公式来看,比较运算符带有反斜杠,B24<>"" 和 TODAY() 之间也缺少参数分隔符。如果单元格中的公式也是这样,需要改为:

=IF(B24<>"",TODAY(),"")

这个公式表示:B24 不为空时,显示当前日期;否则显示空字符串。部分区域设置使用分号作为参数分隔符,需要按本机设置调整。

即使公式语法正确,它也只判断 B24 当前是否有内容,无法保存首次录入买家的时间。第二天打开工作簿并触发重新计算后,TODAY() 可能更新为当天日期;它也可能在不重新打开文件的情况下更新。

少量记录:直接输入固定日期

如果手动录入,在 Windows 版 Excel 中选中 A 列对应的单元格,按 Ctrl + ; 即可插入当天的固定日期。

这个日期没有公式,不会因重新计算而改变,适合记录量较少时使用。

自动记录:用 VBA 在 B 列变更时写入日期

以下示例假设第 1 行为表头,销售记录从第 2 行开始。在 B 列输入买家时,如果对应的 A 列单元格为空,代码会写入电脑当前日期;已有日期会保留。

  1. 在支持 VBA 的桌面版 Excel 中,右键单击目标工作表的标签,选择“查看代码”。
  2. 将以下代码放入该工作表的代码模块。
  3. 将工作簿保存为 .xlsm,并在允许宏运行的环境中使用。
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim changedBuyers As Range
    Dim buyerCell As Range

    Set changedBuyers = Intersect(Target, Me.Range("B2:B" & Me.Rows.Count))
    If changedBuyers Is Nothing Then Exit Sub

    On Error GoTo HandleError
    Application.EnableEvents = False

    For Each buyerCell In changedBuyers.Cells
        If Not IsError(buyerCell.Value2) Then
            If Len(Trim$(CStr(buyerCell.Value2))) > 0 Then
                With Me.Cells(buyerCell.Row, "A")
                    If IsEmpty(.Value2) Then
                        .Value = Date
                        .NumberFormat = "yyyy-mm-dd"
                    End If
                End With
            End If
        End If
    Next buyerCell

    Application.EnableEvents = True
    Exit Sub

HandleError:
    Application.EnableEvents = True
    MsgBox "日期写入失败:" & Err.Description, vbExclamation
End Sub

事件触发时,Date 取得系统日期,代码将其作为值写入 A 列。重新打开工作簿后,这个日期不会自动更新。

代码会逐个处理一次粘贴到 B 列的多个单元格。修改已有买家名称时,如果 A 列已有日期,代码不会覆盖;删除买家信息时,代码也不会自动清除日期。

使用前需要处理已有公式

A 列中已有的 TODAY() 公式需要先处理,否则它们仍会继续更新,而且代码会将这些单元格视为已有内容。

  • 对于日期仍然正确的记录,可以复制 A 列相应区域,再使用“选择性粘贴 → 值”固定当前结果。
  • 对于尚未录入买家的空白记录行,应清除 A 列预填的公式,让代码有空白单元格可写入。
  • 如果历史日期已经变成今天,粘贴为值只能固定现在显示的日期。真实销售日期需要从备份、订单记录等已有资料中恢复。

该方案适用于直接编辑或粘贴 B 列的操作。如果 B 列的内容因公式重新计算而变化,Worksheet_Change 不会触发。Excel 网页版也不能运行这段 VBA。

不建议用引用自身的嵌套 IF 配合迭代计算来保存销售日期:这种做法依赖循环引用和工作簿设置,维护时容易出错。使用明确写入的日期值更容易核对销售记录。

备注:内容仅供参考。