2016-09-15 96 views
0

我有一列数据最多为A300的A列。Excel vba自动填充仅空单元格

在此范围内,其中一些单元格为空,一些包含值。

在VBA中,我设置单元格A1的公式,然后我使用自动填充功能来设置它在我的列(最多A300)是这样的:

ws.Range("A1").Select 
Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1)) 

我的问题是,数据中包含上一些细胞也被抹去了!我试图自动填充,但只能通过空容器。

我想对我的工作表添加过滤器这样的:

ws.Range("$A$1:$A$300").AutoFilter Field:=1, Criteria1:="=" 

然后我再使用自动填充功能,但它似乎填补thourght过滤的细胞...

我们不能在自动填充功能中添加“只清空单元格”参数?类似这样的:

Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1)), Criteria1:="=" 

感谢您的回复!

+1

你想填补他们?静态或渐进值?使用** xlCellTypeBlanks **查看[Range.SpecialCells方法](https://msdn.microsoft.com/en-us/library/office/ff196157.aspx)。 – Jeeped

+0

我对“SpecialCells(xlCellTypeBlanks)”有其他问题。它的结果是,如果复制然后粘贴一个空单元格,这些单元格不再被视为一个空白单元格,并且不会被此代码选中(但该单元格仍为空),这是SpecialCells(xlCellTypeBlanks)的已知问题。所以即使我有一个空白的单元格,我也可以得到“无单元匹配”的错误。你知道这个问题的解决方案吗? –

回答

1

道歉,我想理解的你的问题 - 要填写所有空白单元格,在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 
+0

感谢这是更简单的答案! –

+0

我有“SpecialCells(xlCellTypeBlanks)”的其他问题。它的结果是,如果复制然后粘贴一个空单元格,这些单元格不再被视为一个空白单元格,并且不会被此代码选中(但该单元格仍为空),这是SpecialCells(xlCellTypeBlanks)的已知问题。所以即使我有一个空白的单元格,我也可以得到“无单元匹配”的错误。你知道这个问题的解决方案吗? –

+0

不完全确定问题在这里..第一行找到所有空单元格并选中它们,第二行将A1中的值输入到所选单元格中,因此不能有..除非您有单元格中有空格(“”)不被视为空白 - 是发生了什么? – Jeremy

2

假设你想要静态值,我会使用循环。下一个将填补所有空白单元格与船尾:

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 
+0

谢谢,您的代码适用于A1:A300系列,但我使用的是一个示例,我的真实工作簿将具有超过10k行,并且我将避免循环。但感谢您的帮助! –

3

与像数据:

enter image description here

我会做一个拷贝,而不是向下填充:

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 

带此结果:

enter image description here

注:

的公式被复制后进行调整。

编辑#1:

请注意,有一些情况下使用这个代码将无法正常工作。有可能UsedRange我没有延伸到单元格A300

例如,如果工作表是除了在A1的公式和在A3一些值完全是空的。在这种情况下,Rdest将只包括单个单元格A2。该代码将保留A4A300不变。

+0

感谢这个答案,这是我需要的。对于“usedRange”我已经有了一个问题。它似乎不会重新计算何时删除一些数据或其他,但我可以不使用usedrange。再次感谢 ! –

+0

我有“SpecialCells(xlCellTypeBlanks)”的其他问题。它的结果是,如果复制然后粘贴一个空单元格,这些单元格不再被视为一个空白单元格,并且不会被此代码选中(但该单元格仍为空),这是SpecialCells(xlCellTypeBlanks)的已知问题。所以即使我有一个空白的单元格,我也可以得到“无单元匹配”的错误。你知道这个问题的解决方案吗? –

1

您还可以使用下面的代码:

stAddress = Sheet1.Range("A1").CurrentRegion.SpecialCells(xlCellTypeBlanks).Address 
Sheet1.Range(st).Value = "Empty" 
+0

感谢这个代码的工作,即使它比Jeremy的答案更复杂。谢谢btw! –

+0

我有“SpecialCells(xlCellTypeBlanks)”的其他问题。它的结果是,如果复制然后粘贴一个空单元格,这些单元格不再被视为一个空白单元格,并且不会被此代码选中(但该单元格仍为空),这是SpecialCells(xlCellTypeBlanks)的已知问题。所以即使我有一个空白的单元格,我也可以得到“无单元匹配”的错误。你知道这个问题的解决方案吗? –