如果行中的其他列不为空,填充列

使用

  1. Microsoft Office Excelmacros启用工作表2007年
  2. Microsoft Visual Basic

我一直在寻找解决我的问题的方法,但却找不到解决问题的关键。

案件

在工作表中,我需要自动插入一个值(静态时间戳)到列的指定范围的列之后立足条件,他们都不是空(已被填充)。

示例目标

给定一个接一个地插入值的顺序,当列A:C范围内的值被填充时,我想要列D (指定范围之后的下一个)更新。

 ColumnA ColumnB ColumnC AutoInsert filled filled filled 2016-01-11 20:57 filled filled filled filled filled filled 2016-01-11 20:58 

我得到了什么?

现在当我向列中插入值当前时间戳出现在列B

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A:A")) Is Nothing Then With Target(1, 2) .Value = Now End With End If End Sub 

当前结果:

 ColumnA AutoInsert value 2016-01-11 21:06 value 2016-01-11 21:06 value 2016-01-11 21:07 

我需要什么?

我需要一些方法来检查行内的指定范围的列,不仅如上所示的第一列我得到了什么? )。

我不确定是否需要其他方法而不是Intersect ,或某种循环。 我尝试过使用Target(x, y)Range("A:C") ,但行为与预期不同,似乎应用于每个活动单元格。

尝试这个:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A:C")) Is Nothing And WorksheetFunction.CountBlank(Range("A" & Target.Row & ":C" & Target.Row)) = 0 Then With Me.Cells(Target.Row, 4) Application.EnableEvents = False .value = Now End With End If Application.EnableEvents = True End Sub 

Me指的是表格。 它工作,因为这是一个工作表事件。 如果这是在一个模块,它将需要是ActiveSheet.Cells是一个范围。 它以这种格式使用Cells(Row,Column) 。 整个事情本来可以重写为Me.Range("D" & Target.row)

Target是一个范围,并且Target(row,column)Target.Cells(row,column)缩写。您可以放置Target(1,4)Target(1,1)本身或者单元格范围内的左上angular的单元格。 它不受范围的限制,而是以左上angular的单元格为起点。