EXCEL VBA-循环一行中的单元格,如果不为空,则将单元格值复制到另一行,直到下一行不为空
我正在考虑编写一些代码,将行的数据复制到下一行,直到下一行不是空的。假设第1行中的所有内容都是标题 数据如下: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
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的方法
这里有另一种不用VBA的方法
我发现即使有些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