一旦更新了一个单元,自动填充具有数据的列

一旦列中的一个单元格被填充,如何自动填充0列?

例:

原始表

原始表

一旦我input一个数字到四月列的任何单元格中… 在这里输入图像说明

我想列自动填充其余的单元格为0,就像这样… 在这里输入图像说明

我的第一个想法是使用Worksheet_Change事件像这样…

Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Range("H6:H16") 'H6 to H16 is the range of the April column, I would repeat this for each column in a loop If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then Range("H6:H16").Value = 0 End If End Sub 

但是这会覆盖整个列,而我想保持原来的价值。

有什么方法可以让Excel正确地返回单元格被更改的内容,这样我就可以更改该列中所有单元格的值,除了那个单元格? 还是有另一种更简单的方法来做到这一点?

在H6:H16的4月份,您的数据范围似乎在E6:P16。

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E6:P16")) Is Nothing Then On Error GoTo bm_Safe_exit Application.EnableEvents = False Dim tgt As Range, var As Variant For Each tgt In Intersect(Target, Range("E6:P16")) With Cells(6, tgt.Column).Resize(11, 1) If Application.Count(.Cells) = 1 Then var = tgt.Value .Cells = 0 tgt = var End If End With Next tgt End If bm_Safe_exit: Application.EnableEvents = True End Sub 

在将值写入工作表之前,始终禁用事件处理,否则将触发另一个在原始顶部上运行的Worksheet_Change事件macros,可能触发级联事件。

只是想出一个可能的非vba方式去做这件事。 你可以先用零填充所有的单元格:

在这里输入图像说明

然后从A2开始,突出显示范围“A2:L12”,并转到首页 – >条件格式 – >新规则 – >使用公式来确定要格式化和插入公式的单元格

 =COUNTIF(A$2:A$12,">0")=0 

在这里输入图像说明

然后转到格式 – >字体 ,并将字体颜色更改为白色(另一种替代方法,可能更好的一种方法是将数字格式更改为自定义types的;;;由Jeepedbuild议)。

在这里输入图像说明

在您按几次OK并退出条件格式规则pipe理器后,您的工作表应如下所示:

在这里输入图像说明

一旦将大于零的值添加到单元格中,您将看到该列中的所有零都出现。

在这里输入图像说明

由于您input的值必须大于零,因此您可能不会接受这种方法,但是我认为我会将其发布以防万一您认为您可以使用。

inheritance人是我的答案,希望能给予一些帮助。

 Private Sub Worksheet_Change(ByVal Target As Range) Dim r Dim c Dim keyCells As Range Dim i r = Target.Row c = Target.Column 'January in column E = 5 'December in column P = 16 Set keyCells = Range(Cells(6, c), Cells(16, c)) If c >= 5 And c <= 16 Then ' if target is between the columns If r >= 6 And r <= 16 Then ' if the target is between the rows For Each i In keyCells If Not i.Address = Target.Address Then Application.EnableEvents = False i.Value = 0 Application.EnableEvents = True End If Next i End If End If End Sub