动态删除一系列excel单元格中的空白

时间:2011-08-15 18:11:07

标签: excel dynamic excel-vba vba

我有一个命名的数据范围,称为“数据”。我正在尝试找到一个公式或数组公式,它将在新的单元格范围内返回数据,但是所有空白行都会丢失。

即。 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    

如果空行最终位于数组的末尾,则可以。到目前为止,我很难过

3 个答案:

答案 0 :(得分:4)

您应该使用特殊单元格方法。使用vba或手动。

手动

2007/2010

选择列A
Home Tab -Find&选择 - 转到特别 - 空白 - 确定
主页选项卡 - 删除单元格 - 整行 - 确定

<强> 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

<强>公式

如果你真的需要一个公式,请看一下:

Remove Blanks - Array Formula

答案 1 :(得分:2)

为什么不使用过滤器从适当的列中排除空白?

或者,您可以创建一个额外的标志列,根据您的空白条件(例如IF(OR(X="",Y=""),0,1))指定要包含的每一行,并使用它来过滤您的数据。

答案 2 :(得分: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