Excel 填充列中的空白单元格,直到从重复列表中填充所有单元格
我需要使用VBA代码来填充过滤后的空白单元格列表。我决定用一个小例子画一张图来解释它。D列应该填充A列中的名称,直到每个ID都有一个名称为止 我完全不知道如何循环它使其工作-这是令人难以置信的!我已经在网上搜索了几个小时,所以我现在请求帮助。请注意,C列和D列使用D列的标准空格进行过滤 下面是使用相同的3个名称交替填充筛选列表的空白单元格的工作代码Excel 填充列中的空白单元格,直到从重复列表中填充所有单元格,excel,vba,Excel,Vba,我需要使用VBA代码来填充过滤后的空白单元格列表。我决定用一个小例子画一张图来解释它。D列应该填充A列中的名称,直到每个ID都有一个名称为止 我完全不知道如何循环它使其工作-这是令人难以置信的!我已经在网上搜索了几个小时,所以我现在请求帮助。请注意,C列和D列使用D列的标准空格进行过滤 下面是使用相同的3个名称交替填充筛选列表的空白单元格的工作代码 Sub Macro1() Dim last As Long Dim counter As Integer Dim nameRange As Ra
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
谢谢大家的意见-希望这能在将来帮助其他人。我的例子并不完美,甚至不太好。。。太晚了:) 创建一个封装所有“名称”的命名范围(在我的示例中称为
namesRange
)。
在“指定”列中输入以下公式:
=索引(名称列表,行()-((INT(行()/行(名称列表))*行(名称列表))),1)
更新
想了想,并记住了如何更出色一点。。下面是我在第一个示例中尝试做的事情
=索引(名称列表,MOD(ROW()-1,ROWS(名称列表)-1)+1,1)
如果你不知道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))
这样做无需过滤数据
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
这是一个编程问题吗?如果不是,超级用户网站将更合适。如果这是一个VBA问题,那么一般来说,读者会问你,看看你尝试了什么。你提到了一个循环,所以这将是一个好的开始!你能尝试一个
While()
循环,检查C
列中的项目,直到它遇到一个空单元格吗?@halfer我需要插入vba代码和我的其余代码,这使我能够过滤仍然需要指定名称的ID。我认为,如果你打算发表评论,你至少可以提出一个建议。如果您不知道在循环中使用什么代码块,那么while循环就没有意义。我可以说每个范围的细胞,或者细胞是“很好”的,但是我在这个网站上,是为了找出如何从列表中填充空白细胞,直到它完成,我无法想出一个方法来完成。所以不,我没有这篇文章的代码。我想如果你想发表评论,你至少可以提供一个建议——我恐怕这里没有这样的建议。不过,公平地说,我确实提出了一个建议!@halfer所说的是,如果没有您当前的代码,除了猜测,我们应该怎么做。下面的答案都不适用于过滤后的数据。您应该显示您拥有的代码和更像您拥有的数据集的屏幕截图。ROW()
非常随意,因此列表将根据公式放置在哪一行以不同的名称开始。要始终从顶部开始,请使其行(1:1)
在向下拖动时将向上增加+1。@ScottCraner无论其放置在何处,它都从顶部开始?它计算所需的名称,假设OP希望它在列表中循环,当放入第2行时row()-1
will=1当放入第3行时,它将等于2,它将在列表中进行精细迭代,但将从不同的位置开始,具体取决于公式从哪一行开始。但这都是学术性的,因为OP想要的东西能够处理排序后的数据,这将无法实现正确的迭代,这不是你的错,而是OP在开始时没有说明他们真正想要什么。谢谢你的帮助,但当我尝试时,它不起作用,因为列表被过滤了。我试图用你的答案来显示特殊的单元格,但它仍然不能正常工作。我更新了我的问题以指定已过滤的。
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