2016-09-15 121 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)的已知問題。所以即使我有一個空白的單元格,我也可以得到「無單元匹配」的錯誤。你知道這個問題的解決方案嗎? –