EXCEL VBA-循环一行中的单元格,如果不为空,则将单元格值复制到另一行,直到下一行不为空

EXCEL VBA-循环一行中的单元格,如果不为空,则将单元格值复制到另一行,直到下一行不为空,vba,excel,for-loop,Vba,Excel,For Loop,我正在考虑编写一些代码,将行的数据复制到下一行,直到下一行不是空的。假设第1行中的所有内容都是标题 数据如下: A2 ClientA B2 Product1 C2 Price D2 Quantity E2 Cost A3 B3 C3 Price D3 Quantity E3 Cost A4 B4

我正在考虑编写一些代码,将行的数据复制到下一行,直到下一行不是空的。假设第1行中的所有内容都是标题

数据如下:

    A2 ClientA       B2 Product1       C2 Price       D2 Quantity       E2 Cost
    A3               B3                C3 Price       D3 Quantity       E3 Cost
    A4               B4                C4 Price       D4 Quantity       E4 Cost
    A5 ClientB       B5 Product2       C5 Price       D5 Quantity       E5 Cost
    A6               B6                C6 Price       D6 Quantity       E6 Cost
    A7 ClientC       B7 Product3       C7 Price       D7 Quantity       E7 Cost
    A8               B8                C8 Price       D8 Quantity       E8 Cost
    A9               B9                C9 Price       D9 Quantity       E9 Cost
A3和A4将填充ClientA,B3和B4将填充Product,直到下一行不为空

我一直在寻找一个类似的问题,但我不知道怎么写

最终结果如下:

    A2 ClientA       B2 Product1       C2 Price       D2 Quantity       E2 Cost
    A3 ClientA       B3 Product1       C3 Price       D3 Quantity       E3 Cost
    A4 ClientA       B4 Product1       C4 Price       D4 Quantity       E4 Cost
    A5 ClientB       B5 Product2       C5 Price       D5 Quantity       E5 Cost
    A6 ClientB       B6 Product2       C6 Price       D6 Quantity       E6 Cost
    A7 ClientC       B7 Product3       C7 Price       D7 Quantity       E7 Cost
    A8 ClientC       B8 Product3       C8 Price       D8 Quantity       E8 Cost
    A9 ClientC       B9 Product3       C9 Price       D9 Quantity       E9 Cost

有人知道VBA代码是什么吗?

这不需要VBA

在助手列中写入此公式:
=IF(ISBLANK(A2),F1,A2)


假设辅助列位于列F中。将其向下拖动到数据集中,然后将值复制到原始列中。对B列重复此操作。

此操作不需要VBA

在助手列中写入此公式:
=IF(ISBLANK(A2),F1,A2)


假设辅助列位于列F中。将其向下拖动到数据集中,然后将值复制到原始列中。对B列重复此操作。

如果要使用VBA,可以使用此选项

我不确定您希望如何找到最后一行数据,所以我提供了一个变量,您可以自己更改,它对应于该行。使用Z的第一个For循环将循环通过列A(1)和列B(2),在这个循环中,我们有另一个For循环通过单元格,如果单元格值为“”,则输入最后看到的值


如果你想使用VBA,你可以使用这个

我不确定您希望如何找到最后一行数据,所以我提供了一个变量,您可以自己更改,它对应于该行。使用Z的第一个For循环将循环通过列A(1)和列B(2),在这个循环中,我们有另一个For循环通过单元格,如果单元格值为“”,则输入最后看到的值

您需要:

  • SheetName:要处理的图纸的名称

  • arColumns=Array(“A”,2,3):将要填充的列号或字母添加到此数组中


子填充行() 常量SheetName为String=“Sheet3” 调暗最后一行的长度,x的长度,y的长度 暗弧柱 弧柱=阵列(“A”,2,3) 带工作表(图纸名称) lastRow=.Rows(Rows.Count).End(xlUp).Row 对于x=3到最后一行 对于y=0到UBound(弧柱) 如果为空(.Cells(x,arColumns(y)).value),则.Cells(x,arColumns(y)).value=.Cells(x-1,arColumns(y)).value 下一个 下一个 以 端接头 您需要:

  • SheetName:要处理的图纸的名称

  • arColumns=Array(“A”,2,3):将要填充的列号或字母添加到此数组中


子填充行() 常量SheetName为String=“Sheet3” 调暗最后一行的长度,x的长度,y的长度 暗弧柱 弧柱=阵列(“A”,2,3) 带工作表(图纸名称) lastRow=.Rows(Rows.Count).End(xlUp).Row 对于x=3到最后一行 对于y=0到UBound(弧柱) 如果为空(.Cells(x,arColumns(y)).value),则.Cells(x,arColumns(y)).value=.Cells(x-1,arColumns(y)).value 下一个 下一个 以 端接头
这里有另一种不用VBA的方法

  • 选择空白(CTRL+G,单击特殊,选择空白,确定)
  • 在公式栏中,type=(第一个空格正上方的单元格) 例如:如果A2为空,=A1
  • 按住CTRL键,按enter键将公式提交到所有空白单元格
  • 如果需要删除公式,请选择范围、复制和粘贴值
  • 如果不粘贴值,并尝试进行排序或筛选,则数据将出错

  • 这里有另一种不用VBA的方法

  • 选择空白(CTRL+G,单击特殊,选择空白,确定)
  • 在公式栏中,type=(第一个空格正上方的单元格) 例如:如果A2为空,=A1
  • 按住CTRL键,按enter键将公式提交到所有空白单元格
  • 如果需要删除公式,请选择范围、复制和粘贴值
  • 如果不粘贴值,并尝试进行排序或筛选,则数据将出错

  • 我发现即使有些C列是空的,这个也行,thx Mate我发现即使有些C列是空的,这个也行,thx Mate如果我想找到E列的最后一行呢?添加like:LastRow=activesheet.Cells(.Rows.Count,“E”).End(xlUp)。row如果您发现其中一个答案有帮助或回答了您的问题,请将其标记为答案。如果我想查找E列的最后一行如何?添加like:LastRow=activesheet.Cells(.Rows.Count,“E”).End(xlUp)。row如果您发现其中一个答案有帮助或回答了您的问题,请将其标记为答案。UBound(arColumns)是查找数组的上限,但是数组声明不是动态的,我明白了吗?arColumns=Array(“A”,2,3)那么代码是如何工作的呢?
    UBound(arColumns)
    UBound(arColumns,1)
    返回数组第一维的最后一个索引。UBound(arColumns)是查找数组的上限,但是数组声明不是动态的,我明白了吗?arColumns=Array(“A”,2,3)那么代码是如何工作的呢?
    UBound(arColumns)
    UBound(arColumns,1)
    返回数组第一维的最后一个索引。
    Sub LoopFill()
    
    Dim LastEntry As String, LastRow As Integer
    
    LastRow = 25
    
    For Z = 1 To 2
        LastEntry = ""
        For i = 1 To LastRow
            If Cells(i, Z).Value = "" Then Cells(i, Z).Value = LastEntry
            LastEntry = Cells(i, Z).Value
        Next i
    Next Z
    
    End Sub
    
    Sub FillRows() Const SheetName As String = "Sheet3" Dim lastRow As Long, x As Long, y Dim arColumns arColumns = Array("A", 2, 3) With Worksheets(SheetName) lastRow = .Rows(Rows.Count).End(xlUp).Row For x = 3 To lastRow For y = 0 To UBound(arColumns) If IsEmpty(.Cells(x, arColumns(y)).value) Then .Cells(x, arColumns(y)).value = .Cells(x - 1, arColumns(y)).value Next Next End With End Sub