填充列中的空白单元格,直到从重复列表中填充所有空白单元格

时间:2016-05-15 19:42:49

标签: excel-vba vba excel

我需要使用VBA代码来填充已过滤的空白单元格列表。我决定用一个小例子做一个图片来解释它更容易。应使用col A中的名称填充D列,直到每个ID都有一个名称。

我完全不知道如何循环使其成功 - 它令人难以置信!我一直在网上搜索几个小时,所以我现在正在寻求帮助。请注意,列C和D使用D列的标准空白进行过滤。

example

以下是使用相同的3个名称交替填充已过滤列表的空白单元格的工作代码。

Sub Macro1()

Dim last As Long
Dim counter As Integer
Dim nameRange As Range
Dim cell As Range

last = Range("A2").End(xlDown).Row
Set nameRange = Range("D2:D" & last).SpecialCells(xlCellTypeVisible)

counter = 1

For Each cell In nameRange
    If counter = 1 Then
        cell.Value = "Carrie"
        counter = counter + 1
    ElseIf counter = 2 Then
        cell.Value = "Lisa"
        counter = counter + 1
    Else
        cell.Value = "Bob"
        counter = 1
    End If

Next

End Sub
感谢大家的意见 - 希望这将有助于其他人。

3 个答案:

答案 0 :(得分:2)

Range("D2:D4").Value = Range("A2:A4").Value
Range("D2:D4").AutoFill Destination:=Range("D2:D11")

如果你不知道C列的哪个结尾很容易解决。像

这样的东西
Range("D2:D4").Value = Range("A2:A4").Value
Range("D2:D4").AutoFill Destination:=Range(Range("D2"), _
    Range("C2").End(xlDown).Cells(1, 2))

如果您不知道数据在A列中延伸了多远:

Dim last As Integer

last = Range("A2").End(xlDown).Row

Range("D2:D" & last).Value = Range("A2:A" & last).Value
Range("D2:D" & last).AutoFill Destination:=Range(Range("D2"), _
    Range("C2").End(xlDown).Cells(1, 2))

答案 1 :(得分:2)

这样做无需过滤数据。

Sub foo()
Dim ws As Worksheet
Dim lastrowa As Long
Dim lastrowd As Long
Dim counta As Long
Dim rng As Range

counta = 2 'First row of name list in column A

Set ws = Sheets("Sheet1")

With ws
    lastrowa = .Range("A" & .Rows.Count).End(xlUp).Row
    lastrowd = .Range("D" & .Rows.Count).End(xlUp).Row
    For Each rng In .Range(.Cells(2, 5), .Cells(lastrowd, 5))
        If rng.Value = "" Then
            rng.Value = .Cells(counta, 1).Value
            If counta = lastrowa Then
                counta = 2
            Else
                counta = counta + 1
            End If
        End If
    Next rng
End With


End Sub

答案 2 :(得分:0)

我的例子并不完美,甚至很好......它的晚了:)

创建一个命名范围,用于封装所有"名称" (在我的例子中称为namesRange)。 在你的"指定"列放了以下公式:

=INDEX(namesList,ROW()-((INT(ROW()/ROWS(namesList))*ROWS(namesList))),1)

...更新

考虑一下,并想起如何更好地表现出来......以下是我在第一个例子中尝试做的事情。

=INDEX(namesList,MOD(ROW()-1,ROWS(namesList)-1)+1,1)