循环通过非空白单元格

时间:2017-07-19 02:43:28

标签: excel vba excel-vba

Column A and B Data

我只想知道如何遍历A列上的非空白单元格。我要做的是复制[A1:B1]上的内容,将其添加到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

3 个答案:

答案 0 :(得分:1)

如果您要尝试填写每个产品的标题,请尝试此操作...

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

答案 1 :(得分:0)

例如,从单元格A1模拟 Ctrl - 向下的效果,并在立即窗口中显示地址,值:

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

答案 2 :(得分:0)

试试这个...我(可能)在1000处覆盖了行,但它可能不会对你的表现产生影响。如果你想更精确,有数百篇关于如何找到范围的最后一行的文章。对于偏移函数,它引用与我们循环的单元格相关的单元格。在下面的示例中,代码表示cell.offset(0,1),这意味着我们当前正在循环的单元格右侧的一个单元格。如果您输入Range("A10").offset(0,1),则更清晰(不太环节!)的示例与键入Range("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