Excel vba 仅自动填充空单元格
Excel vba Autofill only empty cells
我有一个 A 列,其中的数据最多为 A300。
在此范围内,这些单元格中有些是空的,有些包含值。
在 VBA 中,我设置单元格 A1 的公式,然后使用自动填充功能在我的列(最多 A300)中设置它,如下所示:
ws.Range("A1").Select
Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1))
我的问题是某些单元格中包含的数据也被删除了!我正在尝试像它一样自动填充,但只能通过空单元格。
我试过像这样在我的工作表上添加过滤器:
ws.Range("$A:$A0").AutoFilter Field:=1, Criteria1:="="
然后我重新使用了自动填充功能,但它似乎填充了过滤后的单元格...
我们不能在自动填充函数中添加 "only empties cells" 这样的参数吗?像这样:
Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1)), Criteria1:="="
感谢您的回复!
假设您需要静态值,我会使用循环。下面的那个将用便便填充所有空单元格:
Sub AllFillerNoKiller()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
For Each c In ws.Range("A1:A300")
If c.Value = "" Then c.Value = "poop"
Next
End Sub
数据如下:
我会做一个副本而不是一个 fill-down:
Sub luxation()
Range("A1").Formula = "=ROW()"
Dim rDest As Range
Set rDest = Intersect(ActiveSheet.UsedRange, Range("A1:A300").Cells.SpecialCells(xlCellTypeBlanks))
Range("A1").Copy rDest
End Sub
结果如下:
注意:
公式复制后调整。
编辑#1:
请注意,在某些情况下此代码将不起作用。 UsedRange
我可能没有延伸到单元格 A300。
例如,如果工作表除了 A1 中的公式和 A3 中的一些值外完全是空的。在这种情况下 Rdest
将只包含单个单元格 A2。该代码将使 A4 到 A300 保持不变。
您也可以使用以下代码:
stAddress = Sheet1.Range("A1").CurrentRegion.SpecialCells(xlCellTypeBlanks).Address
Sheet1.Range(st).Value = "Empty"
抱歉,我没理解你的问题 - 想用 A1 中的值填充所有空白单元格吗? - 给你:
Sub Replace()
If Trim(Range("A1").Value) = "" Then
MsgBox "There's no value in A1 to copy so there's nothing to copy to all blank cells", vbInformation, "Nothing in A1"
Exit Sub
Else
Range("A1:A300").SpecialCells(xlCellTypeBlanks).Select
Selection.Value = Range("A1").Value
End If
End Sub
我有一个 A 列,其中的数据最多为 A300。
在此范围内,这些单元格中有些是空的,有些包含值。
在 VBA 中,我设置单元格 A1 的公式,然后使用自动填充功能在我的列(最多 A300)中设置它,如下所示:
ws.Range("A1").Select
Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1))
我的问题是某些单元格中包含的数据也被删除了!我正在尝试像它一样自动填充,但只能通过空单元格。
我试过像这样在我的工作表上添加过滤器:
ws.Range("$A:$A0").AutoFilter Field:=1, Criteria1:="="
然后我重新使用了自动填充功能,但它似乎填充了过滤后的单元格...
我们不能在自动填充函数中添加 "only empties cells" 这样的参数吗?像这样:
Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1)), Criteria1:="="
感谢您的回复!
假设您需要静态值,我会使用循环。下面的那个将用便便填充所有空单元格:
Sub AllFillerNoKiller()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
For Each c In ws.Range("A1:A300")
If c.Value = "" Then c.Value = "poop"
Next
End Sub
数据如下:
我会做一个副本而不是一个 fill-down:
Sub luxation()
Range("A1").Formula = "=ROW()"
Dim rDest As Range
Set rDest = Intersect(ActiveSheet.UsedRange, Range("A1:A300").Cells.SpecialCells(xlCellTypeBlanks))
Range("A1").Copy rDest
End Sub
结果如下:
注意:
公式复制后调整。
编辑#1:
请注意,在某些情况下此代码将不起作用。 UsedRange
我可能没有延伸到单元格 A300。
例如,如果工作表除了 A1 中的公式和 A3 中的一些值外完全是空的。在这种情况下 Rdest
将只包含单个单元格 A2。该代码将使 A4 到 A300 保持不变。
您也可以使用以下代码:
stAddress = Sheet1.Range("A1").CurrentRegion.SpecialCells(xlCellTypeBlanks).Address
Sheet1.Range(st).Value = "Empty"
抱歉,我没理解你的问题 - 想用 A1 中的值填充所有空白单元格吗? - 给你:
Sub Replace()
If Trim(Range("A1").Value) = "" Then
MsgBox "There's no value in A1 to copy so there's nothing to copy to all blank cells", vbInformation, "Nothing in A1"
Exit Sub
Else
Range("A1:A300").SpecialCells(xlCellTypeBlanks).Select
Selection.Value = Range("A1").Value
End If
End Sub