Excel VBA在输入数据时向表中的最后一行添加公式/日期

时间:2016-08-18 13:03:08

标签: excel vba excel-vba

我想要将日期追加到用户仅在最后一行的一列中输入数据的数据范围。因此,如果有4行数据,并且用户在第五行的一个有效列(B:L)中输入了任何内容,则日期将被添加到“M”行以标记输入日期。 / p>

有没有办法轻松做到这一点?我可以想到一种简单的方法来添加sub,基本上可以说任何列B中的数据:L - >添加日期,但每次用户更改工作表或添加信息时我都必须调用它。

我可以在每一行中输入一个公式,但是当覆盖或扩展任何内容时,我仍然需要更新它。只是想知道是否有人知道快速解决方案。

编辑:

实际使用,

Sub Worksheet_Change(ByVal Target As Range)
    Dim lastRow As Long
    lastRow = GetLastRow(Sheets("MySheet"))
    If lastRow = 1 Then Exit Sub
    If Not Intersect(Target, Target.Worksheet.Range("B" & CStr(lastRow) & ":L" & CStr(lastRow))) Is Nothing Then
        Sheets("MySheet").Range("M" & CStr(lastRow)).value = Date
    End If
End Sub

将修改工作表更改时在最后一行之外输入的任何内容。因此,如果数据进入第6行,并且您在第9行输入内容,它会将最后一行检测为第9行。我已经确定这实际上已经足够了,因为我将整理出空行,但如果您想要只需修改最后一行,就可以使用保留为全局变量的oldLastRow值。然后检查sub是否仅针对该值进行修改,如果是,请运行代码,然后将oldLastRow更改为新的lastRow

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,那么您要查找的是当前工作表的Worksheet_Change事件以及确保更新特定范围的过滤器。

要执行此操作,请在VBA编辑器中转到您希望使用此功能的工作表,然后双击它,然后输入以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not (Intersect(Target, ActiveSheet.Range("B:L")) Is Nothing) Then
        ActiveSheet.Range("M" & Target.Row).Value = Now()
    End If
End Sub

这基本上说的是,如果B列到L列中有任何变化,则将当前时间放入M列。

希望这可以解决问题!

<强>更新

按照评论中的说明考虑最后一行:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim LastRow As Long

    LastRow = ActiveSheet.UsedRange.Rows.Count

    If Not (Intersect(Target, ActiveSheet.Range("B" & LastRow & ":L" & LastRow)) Is Nothing) Then
        ActiveSheet.Range("M" & LastRow).Value = Now()
    End If
End Sub