Excel 如何让日期单元格随着某个单元格的修改而自动更新日期

还没有实现,是因为穷,启用宏功能要付费的!目前也不是经常使用excel表格记录或修改数据!只是看到了对应的解答所以先记录下

功能:记录修改时间

当修改 excel 中的某个单元格数据时,位于同行的日期单元格显示当前时间,而其他行日期单元格日期时间不变,仅修改变动过的数据的日期!

解决方法:

右击sheet1标签>查看代码>粘贴下面的代码

Private Sub Worksheet_Change(ByVal Target As Range)
    For Each c In Target.Cells '如果用填充等同时改变了多个单元格,则一个个的进行判断
        With c
            If .Column = 2 Then '判断被改变的单元格是否在B列
                Application.EnableEvents = False
                .Offset(0, -1) = Date '如果在B列,则在同行的A列填充当前系统日期
                Application.EnableEvents = True
            End If
        End With
    Next
End Sub

来源:http://club.excelhome.net/viewthread.php?tid=439225

代码解释:

If .Column = 2 表示第二列的任意个单元格发生变化,如果你是第三个单元格,则改成 If .Column = 3,以此类推。
.Offset(0, -1) = Date 这个可以望文生义,offset表示偏移,比如.Offset(0, -1)表示同行左边一列 .Offset(0,2)表示同行右边数2列 ,.Offset(1,2)表示下面一行,右边数2列,=date表示将这个单元格改成当前的日期。

进阶

Option Explicit
 
Const TARGET_RNG = "A:A"  '指定事件发生的目标区域
Const Ref_col = "b"  '指定参考列,事件发生行对应的参考列中有数据时,事件才有效
Const date_col = "j" '指定事件发生时,日期计入区域
 
Dim old_value
Dim old_ref_col_value
 
Private Sub Worksheet_Change(ByVal Target As Range)
 
Dim num
Dim mod_cell
Dim area_judge
Dim value_pre
Dim row_process
 
On Error Resume Next '防止异常动作发生时,导致程序被中断,例如插入空行
 
Application.EnableEvents = False '防止事件被重复触发
 
'MsgBox Target.Address
'MsgBox Target.Columns.Count
 
num = 0
row_process = (Target.Columns.Count > 256) '当事件对象的行数大于256时,判断为行操作
 
For Each mod_cell In Target.Cells '同时处理多个单元格时,循环判断
    Set area_judge = Application.Intersect(Range(TARGET_RNG), mod_cell) '判断单元格是否在目标区域
        If Not area_judge Is Nothing And Not row_process Then  '当事件发生在目标列 且 非行操作时,进入判断,否则跳转Next
            If mod_cell.Count <> 1 Then
                value_pre = old_value(num + 1, 1) '处理多个单元格时,判断是否发生修改
            Else
                value_pre = old_value  '处理单个单元格时,判断是否发生修改
            End If
 
            If mod_cell.Text <> value_pre And old_ref_col_value <> "" Then '单元格发生了修改,而且参考列中有数据时
                If mod_cell.Text <> "" Then                                '修改后的单元格不等于空,填入当前时间
                    Range(date_col & mod_cell.Row).Value = Now
                Else
                    Range(date_col & mod_cell.Row).Value = ""              '修改后的单元格等于空,即删除操作,日期列清空
                End If
            End If
        End If
Next
Application.EnableEvents = True '恢复事件有效
On Error GoTo 0                 '错误发生进入中断
                
End Sub
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
Application.EnableEvents = True '事件有效
 
old_value = Target.Value                                     '单元格被选中时,存储当前值,用于比较修改后的单元格值是否发生变化,避免进入编辑状态但未修改情况触发事件
old_ref_col_value = Range(Ref_col & Target.Row).Value        '单元格被选中时,存储参考列的值,值不为空时,事件才有效
 
End Sub

代码说明

1)在A列中单元数据发生该百年,对应的B列存在数据的时候,J列自动记录当前时间。

2)当发生删除操作时,清空J列的时间记录。

3)多行同时发生变化时,能够同时记录时间。

B列是参考列,B列中没有数据的话,事件无效(可通过全局变量Ref_col修改)

A列删除操作时,只是把A列中的记录删除了,比如之前记录了修改此数据,后来发现不要修改,就把修改记录删除,表示此数据没有发生变化,所以不记录当前时间。

在本需求中,实际的数据删除操作是把数据行背景色调整为灰色,表示无效数据。

效果

在Excel数据工作表中,指定区域内容发生数据修改时,在A列记录修改类型(增加,修改,删除),然后再J列记录修改时间。手动输入比较麻烦,希望在A列记录修改类型后,J列中自动记录修改时间。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值