一个单元格更新后自动用数据填充一列

Posted

技术标签:

【中文标题】一个单元格更新后自动用数据填充一列【英文标题】:Auto-filling a column with data once one cell has been updated 【发布时间】:2016-01-15 23:44:39 【问题描述】:

如何在列中的一个单元格被填充后自动用 0 填充列?

例子:

原表

一旦我在四月列的任何单元格中输入了一个数字...

我希望该列自动用 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 是否有某种方法可以准确返回更改的单元格,以便我可以更改该列中除该列之外的所有单元格的值?还是有另一种更简单的方法来做到这一点?

【问题讨论】:

【参考方案1】:

只是跳出框框思考可能的非 vba 方式来做这件事。您可以先用零填充所有单元格:

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

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

然后转到 Format-->Font 并将字体颜色更改为白色(另一种选择,可能更好的选择是将数字格式更改为自定义,类型为 @987654332 @ 由 Jeeped 建议)。

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

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

由于您输入的值必须大于零,因此您尝试执行的操作可能无法接受这种方法,但我想我会发布它以防您觉得可以使用它。

【讨论】:

使用类似方法时,我发现将数字格式更改为自定义类型:;;; 似乎比白色字体更不可见。 不错!我更喜欢你的格式选项。我对我的答案进行了编辑 虽然这可行,但它不适用于我正在做的事情。我有基于单元格中数据的图表,所以即使用户看不到零,图表仍然可以看到,并且会混淆格式。【参考方案2】:

在 H6:H16 中使用 Apr,您的数据范围似乎在 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 事件宏,可能会触发一系列事件。

【讨论】:

【参考方案3】:

这是我的回答,希望能给你一些帮助。

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

【讨论】:

以上是关于一个单元格更新后自动用数据填充一列的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel 中每隔一个单元格自动填充

EXCEL里面怎么自动查看单元格是不是包含在另一列

运行 ZAPIER ZAP 后 Google 表格中的自动填充单元格

Excel vba 仅自动填充空单元格

求助excel单元格不同自动添加3个空白行

如何查找单元格中是不是包含部分文本并引用另一列数据