Excel:向下复制一列的值,直到另一列中的第一个空白单元格?

时间:2018-07-19 17:16:14

标签: excel vba

我希望找到一种方法,可以沿B列向下复制单元格值,直到E列中的第一个空白单元格为止。我基本上是这样的:

enter image description here

但是我想自动发生的是:

enter image description here

是否有办法在E列中添加新成分时自动将产品名称复制到B列中,然后在添加新产品时(在空白行之后)以新的产品名称重新开始。 / p>

3 个答案:

答案 0 :(得分:2)

如果要手动将成分添加到E列,则可以在C中使用公式。

在单元格C3中放入此公式,并根据需要向下拖动:

=IF(AND(E2<>"",E3<>""),"Product "&COUNTBLANK($E2:$E$3)+1,IF(AND($E2="",ISBLANK($E2),$E3<>""),"Product "&COUNTBLANK($E$2:$E2),""))

enter image description here

答案 1 :(得分:0)

这并不是天生的“自动”,而是每次运行时都会填写您的产品名称。

Sub Test()
    Dim oPrevName As String
    oPrevName = ""

    For icounter = 1 To Sheet1.Cells(Rows.Count, 5).End(xlUp).Row
        If Sheet1.Cells(icounter, 5).Value <> "" Then
            If Sheet1.Cells(icounter, 2).Value <> oPrevName And Sheet1.Cells(icounter, 2).Value <> "" Then
                oPrevName = Sheet1.Cells(icounter, 2).Value
            End If
            Sheet1.Cells(icounter, 2).Value = oPrevName
        End If

    Next
End Sub

我们存储在产品列(2)中找到的先前的非空白名称。如果同一行(第5列)中列出了一种成分,我们将添加存储的产品名称。

答案 2 :(得分:0)

您应该可以使用Worksheet.Change事件来执行此操作。此代码在工作表模块中。它可能需要调整,但基本上需要执行以下操作:

  1. 当工作表中的单元格发生更改时,请检查该单元格是否在E列中。我假设您一次要输入一种成分,因此For each rng...可能会过大。
  2. 检查单元格是否不是新产品列表中的第一成分。我想到的最简单的方法是检查其上方的单元格是否不为空白,并且上方一行,左侧三列(即产品名称所在的位置)的单元格也不为空白。
  3. 如果满足前面两个条件,请向下“复制”产品名称。

因此,必须手动输入每个新产品名称 ,在前一个产品之后跳过一行,然后填写第二个成分便进行填写。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range

    On Error GoTo ErrHandler
    Application.EnableEvents = False

    For Each rng In Target
        If Not Intersect(rng, Columns(5)) Is Nothing Then
            If rng.Row > 1 And Not IsEmpty(rng.Offset(-1)) And Not IsEmpty(rng.Offset(-1, -3)) Then
                rng.Offset(, -3).Value = rng.Offset(-1, -3).Value
            End If
        End If
    Next rng

ErrHandler:
    Application.EnableEvents = True

End Sub