Excel VBA将公式/date添加到工作表的最后一行数据input
我有一个数据范围,我想追加的date,当用户input数据在最后一行只有一列。 因此,如果有4行数据,并且用户在第五行的有效列(B:L)之一中input了任何内容,则date将被添加到“M”行以标记date。
有没有办法轻松做到这一点? 我可以想到一个简单的方法来添加一个sub
,基本上说,如果在任何列B:L – >添加date数据,但我不得不每次用户更改表或添加信息时调用此。
我可能只是在每行中input一个公式,但是当任何内容被覆盖或扩展时,我仍然必须更新它。 只是想知道如果有人知道一个快速的解决scheme。
编辑:
其实使用,
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
在修改表单时将修改最后一行input的内容。 所以,如果数据到了第6行,并且你在第9行input了一些东西,它将把最后一行检测为第9行。我已经确定这已经足够了,因为我将整理出空行,但是如果你想只要修改最后一行,就可以使用保留为全局variables的oldLastRow
值。 然后检查是否只修改该值,如果是这样,运行你的代码,然后将oldLastRow
更改为新的lastRow
。
如果我正确理解您的问题,那么您要查找的是当前工作表的Worksheet_Change事件以及filter,以确保更新了特定范围。
要做到这一点,在VBA编辑器中,转到您想要的function表,然后双击它,然后input以下代码:
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