如何使用VBA填写系列?

时间:2018-12-28 16:48:03

标签: excel vba excel-vba

我正在尝试获取代码以在D列中搜索非空白单元格。当找到一个不为空的单元时,它将复制该单元格并填充下面的系列。然后,我希望它重复此代码,直到“ D3020”为止。

但是,每次我运行代码时,它都会复制一个单元格并将其一直粘贴到“ D3020”。还有其他值也需要复制,因此我需要解决此问题。我尝试使用.offset属性。我尝试使用.range.copy属性。

 Sub Fill()
 Dim SRng As Range
 Dim SCell As Range

 Set SRng = Range("D1101:D3020")

 For Each SCell In SRng
     If SCell <> "" Then
         SCell.Copy
         Range(SCell, SCell.Offset(10, 0)).PasteSpecial(xlPasteAll)
     End If
 Next SCell

 End Sub

我想要这段代码在Range(“ D1101:D3020”)中搜索<>“”的单元格。找到一个序列后,将其填充在其下方的序列中,并停在下一个单元格中包含数字的位置。

例如

D1101 = 1601166(参见图片)我想复制它并填充它下面的系列。彼此之间正好相隔十行。然后D1121 = 1601168(参见图片)我也想为此复制/填充系列。 enter image description here

2 个答案:

答案 0 :(得分:4)

无需循环;只需用上面的值填充空白即可。

sub fillBlanks()

    dim brng as range

    on error resume next
    set brng = Range("D1101:D3020").specialcells(xlcelltypeblanks)
    on error goto 0

    if not brng is nothing then
        brng.formular1c1 = "=r[-1]c"
        Range("D1101:D3020") = Range("D1101:D3020").value
    end if

end sub

答案 1 :(得分:2)

Option Explicit

Sub Test()

    FillEmptyFromTop [D1101:D3020]

End Sub

Sub FillEmptyFromTop(oRng As Range)

    Dim v, a, i

    With oRng.Columns(1)
        a = .Value
        For i = LBound(a, 1) To UBound(a, 1)
            If IsEmpty(a(i, 1)) Then a(i, 1) = v Else v = a(i, 1)
        Next
        .Value = a
    End With

End Sub