在列中填充空白单元格,直到从重复列表中填充所有空白单元格
我需要使用VBA代码来填充已过滤空白单元格的列表。我决定用一个小例子来制作一张照片,以更容易地解释它。列D应填充col A的名称,直到每个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
感谢大家的意见 - 希望这将有助于未来的其他人。
这将做到这一点,而无需过滤的数据。
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
我的例子并不完美,甚至还有...它的后期:)
创建封装(在我的例子称为namesRange
)所有的“名”命名的范围。 在你的“分配”栏中把下面的公式:
=INDEX(namesList,ROW()-((INT(ROW()/ROWS(namesList))*ROWS(namesList))),1)
更新...
想过这个问题,念着如何练成多一点。以下是我试图在我的第一个例子中做。
=INDEX(namesList,MOD(ROW()-1,ROWS(namesList)-1)+1,1)
'ROW()'是非常随意的,因此列表将以不同的名称开始,具体取决于公式放置在哪一行。要始终从顶部开始,使其成为“ROW(1:1)”,当它被拖拽时会增加+1。 –
@ScottCraner它确实从顶部开始,而不管它放在哪里?它计算所需的名字,因为当OP放置在第2行时,它希望它循环通过列表 – NickSlash
当放置在第3行时,它将等于2,它将遍历列表,但会根据公式开始的哪一行而从不同的位置开始。但是,这一切都是学术性的,因为OP想要的东西可以与分类数据一起工作,并且这不会实现正确的迭代,这不是你的错,而是OP没有说明他们在开始时真正想要的东西。 –
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))
感谢您的帮助,但是当我尝试它不工作,由于列表被过滤。我正在尝试使用特殊单元格可见的答案,但它仍然无法正常工作。我更新了我的问题以指定过滤。 –
这是一个编程问题吗?如果没有,_Super User_网站会更合适。如果这是一个VBA问题,那么一般来说,读者会询问你试过的东西。你提到一个循环,所以这将是一个好的开始!你可以尝试一个'While()'循环来检查'C'列中的项目,直到它遇到一个空单元格吗? – halfer
@halfer我需要vba代码插入我的代码的其余部分,让我到过滤仍然需要分配名称的ID的这一点。我想如果你要评论你至少可以提供一个建议。 while循环没有意义,如果你不知道在循环中使用什么代码块。我可以对范围中的每个单元格说,或者单元格是“>”“很好,但是我在网站上查找如何从名称列表中按顺序填充空白单元格,直到它完成为止,找出一个办法来做到这一点。所以不,我没有这个特定的代码。 –
_我想如果你要发表评论,你至少可以提供一个建议_ - 恐怕它不会像这样工作。虽然,公平地说,我确实提供了一个建议! – halfer