【问题标题】:Dynamically remove blanks from a range of excel cells从一系列 Excel 单元格中动态删除空白
【发布时间】:2011-10-27 11:33:16
【问题描述】:

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

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    

如果空白行位于数组的末尾,那也没关系。到目前为止,我很难过

【问题讨论】:

  • 行列存在还是只有 x 和 y? x 包含某些东西而 y 不包含,或者反之亦然?
  • @nick rulez" 行列确实存在,x 和 y 要么填充要么空白。永远不会出现 x 为空白而 y 不是空白的情况。

标签: dynamic excel vba


【解决方案1】:

您应该为此使用特殊的单元格方法。使用 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

公式

如果您真的需要公式,请看这里:

Remove Blanks - Array Formula

【讨论】:

    【解决方案2】:

    为什么不直接使用过滤器来排除相应列中的空白?

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

    【讨论】:

    • 我不想使用过滤器,因为我希望在更改原始范围时自动更新新范围。
    【解决方案3】:

    我喜欢克里斯的建议。 这是一种 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 2019-11-27
      • 1970-01-01
      • 2012-03-20
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多