我需要使用VBA代码来填充已过滤的空白单元格列表。我决定用一个小例子做一个图片来解释它更容易。应使用col A中的名称填充D列,直到每个ID都有一个名称。
我完全不知道如何循环使其成功 - 它令人难以置信!我一直在网上搜索几个小时,所以我现在正在寻求帮助。请注意,列C和D使用D列的标准空白进行过滤。
以下是使用相同的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
感谢大家的意见 - 希望这将有助于其他人。
答案 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)