循环通过非空白单元格

A栏和B栏数据

我只是想知道如何循环通过列A上的非空白单元格。我想要做的是复制[A 1:B 1]上的内容添加到列A上的每个非空白单元格的顶部。到目前为止我已经计算了列A上的非空白单元格,但是卡住了。 我知道一个Offset函数应该用于这个。

这是我的代码到目前为止:

Dim NonBlank as Long NonBlank = WorksheetFunction.CountA(Worksheet(1).[A:A]) For i = 1 to NonBlank [A1:B1].Copy Offset(1,0). "I'm stuck here" Next i 

作为例子来模拟单元格A1中CtrlDown的效果,并显示即时窗口中的地址,值:

 Sub HopToNextNonBlankCellBelow() Dim oRng As Range Set oRng = Range("A1") Debug.Print "Cell Address", "Cell Value" Do Set oRng = oRng.End(xlDown) If Not IsEmpty(oRng) Then Debug.Print oRng.Address(0, 0), oRng.Value Loop Until oRng.Row = Rows.Count Set oRng = Nothing End Sub 

如果您试图填充每个产品的标题,请尝试…

 Sub FillHeaders() Dim lr As Long Dim Rng As Range lr = ActiveSheet.UsedRange.Rows.Count Application.ScreenUpdating = False On Error Resume Next Range("A1:B1").Copy For Each Rng In Range("A3:A" & lr).SpecialCells(xlCellTypeConstants, 2).Areas If Rng.Cells(1).Value <> Range("A1").Value Then Rng.Cells(1).Offset(-1, 0).PasteSpecial xlPasteAll End If Next Rng Application.CutCopyMode = 0 Application.ScreenUpdating = True End Sub 

试试这个…我已经(可能)超过1000行的行数,但它可能不会影响你的performance。 如果你想更精确的话,那么有数百篇关于如何查找范围的最后一行的文章。 至于偏移函数,它引用一个与正在循环的单元格有关的单元格。 在下面的例子中,代码是说cell.offset(0,1) ,这意味着我们当前正在循环的单元格右边的一个单元格。 如果input: Range("A10").offset(0,1) ,它将与inputRange("B10")

 Dim Cell As Range For Each Cell In Range("A2:A1000").Cells If Not IsEmpty(Cell) Then Cell.Offset(0, 1).Value = Cell.Value End If Next Cell