我希望在将值输入另一个值的时候用日期时间更新单元格,
如何在将值输入A时将B列的值更改为日期时间?
是否有类似if-then-else的东西?
我尝试过条件格式但没有成功。
有人可以发一个有效的例子吗?
谢谢
答案 0 :(得分:2)
这是一个替代事件过程,用于处理用户一次更新多个单元格(即粘贴一个单元格块)的情况。
使用Worksheet_Change
事件过程时,必须在开始时关闭事件处理,并确保它最终会重新打开。
请注意,我故意省略了时间戳的格式,因为前面的例子已经删除了日期。如果列尚未格式化并且您需要对其进行格式化,我建议您添加一行代码来设置.NumberFormat
属性。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 1 Then
Target.Resize(ColumnSize:=1).Offset(ColumnOffset:=1).Value = Now
End If
Application.EnableEvents = True
End Sub
跟踪A列变化的情况很容易;当用户粘贴单元格块时,其他列可能会有点棘手。例如,如果要捕获对D列的更改,则代码需要处理粘贴单元格C2:D2的情况,在这种情况下Target.Column
= 3.(使用Intersect
方法或查看在Target.Columns.Count
财产。
答案 1 :(得分:1)
你可以自己试试这个,不是吗?
在我看来,最难的部分是考虑Change
事件。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Cells(Target.Row, 2).Value = Format(Now, "h:mm")
Application.EnableEvents = True
End Sub
您可以将Format
内容更改为您需要的内容。
答案 2 :(得分:1)
尝试使用
=IF(A3<>"",IF(B3="",NOW(),B3),"")
值将在A列中,时间戳在B列中。此外,您还必须在选项中启用迭代计算。
请注意,只有在A列中首次输入值时才会生成时间戳。要使用此方法,而不是通常编辑单元格的值,您必须删除它并重新输入输入新值。
我担心这只是一种解决方法,而不是一个完整的解决方案。我会更新这个,以防我找到更方便的东西。
答案 3 :(得分:1)
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'when entering data in a cell in Col A
On Error GoTo enditall
Application.EnableEvents = False
If Target.Cells.Column = 1 Then
n = Target.Row
If Me.Range("A" & n).Value <> "" Then
Me.Range("B" & n).Value = Format(Now, "hh:mm:ss")
End If
End If
enditall:
Application.EnableEvents = True
End Sub
如何使用?
右键单击工作表标签和“查看代码”。
将代码粘贴到该工作表模块中。
Alt + q返回Excel窗口。
Click here获取示例文件...
答案 4 :(得分:0)
公式= NOW()是volitile,这意味着只要工作簿中的任何内容发生更改,它就会重新计算,所以如果你使用它,你应该没有问题。
单独注意,您只需在代码中添加Application.Volitile
即可创建具有volitile的UDF。