我希望找到一种方法,可以沿B列向下复制单元格值,直到E列中的第一个空白单元格为止。我基本上是这样的:
但是我想自动发生的是:
是否有办法在E列中添加新成分时自动将产品名称复制到B列中,然后在添加新产品时(在空白行之后)以新的产品名称重新开始。 / p>
答案 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),""))
答案 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
事件来执行此操作。此代码在工作表模块中。它可能需要调整,但基本上需要执行以下操作:
For each rng...
可能会过大。因此,必须手动输入每个新产品名称 ,在前一个产品之后跳过一行,然后填写第二个成分便进行填写。
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