【问题标题】:Delete blank cells in range删除范围内的空白单元格
【发布时间】:2018-08-09 07:07:01
【问题描述】:

我想删除范围内的空白单元格 (E1:E130)。

此代码跳过单元格。

For Each cell In ranger
    If cell.Value = "" Then
        cell.Delete
    End If
next cell

为了使我的目标更明确:我有一个包含文本的单元格列表和 E1:E130 范围内的空单元格,我想从 E1 开始创建一个没有任何空单元格的列表。
例如,按字母排序也是一个很好的解决方案,但这对我来说也不起作用。

【问题讨论】:

    标签: excel vba cell


    【解决方案1】:

    我会像下面这样去

    With Range("E1:E130")
        If WorksheetFunction.CountA(.Cells) > 0 Then .SpecialCells(xlCellTypeBlanks).Delete Shift:=xlShiftUp
    End With
    

    【讨论】:

      【解决方案2】:

      您可以使用Range.SpecialCells Method 一次性删除特定范围内的所有空白单元格:

      Range("E1:E130").SpecialCells(xlCellTypeBlanks).Delete
      

      【讨论】:

        【解决方案3】:

        您可以尝试使用此代码删除定义范围上的空白单元格:

        Sub RemoveBlankCells()
        
        Dim rng As Range
        
        'Store blank cells inside a variable
          On Error GoTo NoBlanksFound
            Set rng = Range("E1:E130").SpecialCells(xlCellTypeBlanks)
          On Error GoTo 0
        
        'Delete blank cells and shift upward
          rng.Rows.Delete Shift:=xlShiftUp
        
        Exit Sub
        
        'ERROR HANLDER
        NoBlanksFound:
          MsgBox "No Blank cells were found"
        
        End Sub
        

        【讨论】:

          【解决方案4】:

          这里是一个老问题,但是: OP,我不确定你的问题('对于范围内的每个单元格'没有删除所有想要的单元格)源于以下内容,但在我知道 Range(...).RemoveDuplicates 之前,我写了'for循环' 完成这项任务。

          起初我从上到下运行循环并删除了不需要的单元格。但是当你删除一个单元格时,整列向上移动,而你的计数器保持相同的值,所以如果有 2 个空白,第二个在删除第一个时向上移动,然后循环跳过空白。

          然后,我从下到上运行循环(步骤 -1),这就解决了这个问题。

          【讨论】:

          • 你要我为此写一段代码吗?我手头没有任何东西,因为我一直在使用 .RemoveDuplicates,所以我什至忘记了我是怎么做到的。
          • 一些代码将帮助比您缺乏经验的其他人理解和使用您的答案。
          【解决方案5】:

          这应该可行:

          Columns("E:E").Select
          Selection.SpecialCells(xlCellTypeBlanks).Select
          Selection.Delete Shift:=xlUp
          

          【讨论】:

          【解决方案6】:

          此方法使用特殊方法,如果您想擦除与空白单元格相关的所有数据,则更有用。

           Range("A:B").SpecialCells(xlCellTypeBlanks).Select
                      Selection.EntireRow.Delete
          

          【讨论】: