2011-08-15 159 views
2

我有一個名爲「數據」的命名數據範圍。我試圖找到一個公式或數組公式,它會返回一個新的單元格範圍內的數據,但所有空行都會丟失。動態刪除一系列excel單元格中的空白

data是:

row x y  
1  A 77  
2   
3  B 23  
4  A 100  
5  

而且我的新範圍是:

row x y  
1  A 77  
3  B 23  
4  A 100  

它的確定,如果空行的數組的結尾收場。到目前爲止,我被難倒了

+0

行列是否存在或只有x和y?可能會發生,x包含的東西,y不或反之亦然? –

+0

@nick rulez「行列確實存在,並且x和y都是填充的或空白的。從不是x是空白而y不是。 – Zach

回答

4

您應該爲此使用特殊單元格方法。無論是與vba或手動。

手動

2007/2010

選擇A列
主頁選項卡 - 查找&選擇 - 轉到特 - 空格鍵 - 好吧
主頁選項卡 - 刪除單元格 - 整個行 - 好

VBA

Sub DeleteBlanks() 
    Activesheet.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
End Sub 

如果你想保留原始數據的完整和範圍複製到另一個工作表試着這麼做:

Sub DeleteBlanks() 

    Dim vArray As Variant 
    '// Get an array of your data 
    vArray = Sheet1.UsedRange 
    '// Copy the data to another sheet 
    Sheet2.Range("A1").Resize(UBound(vArray, 1), UBound(vArray, 2)).Value = vArray 
    '// Delete blanks 
    Sheet2.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

End Sub 

FORMULA

如果你真的需要一個公式來看看這裏:

Remove Blanks - Array Formula

2

爲什麼不只是使用過濾器從適當的列中排除空白?

或者,您可以創建一個額外的標誌列,根據您的空白條件(例如IF(OR(X="",Y=""),0,1))指定要包含的每行,並使用它來過濾數據。

+0

我不想使用過濾器,因爲我想要當我更改原始範圍時自動更新的新範圍。 – Zach

2

我喜歡克里斯的建議。 這是一種vba方法。 試試你的文件副本。

Sub delete_empty_rows() 
Dim last As Long, i As Long 
last = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
For i = last To 1 Step -1 
    If Application.CountA(Range("A" & i).EntireRow) = 0 Then 
     Range("A" & i).EntireRow.Delete 
    End If 
Next i 
End Sub 
相關問題