【问题标题】:VBA Excel How to delete filter blank rows (but not entire row) and shift cells upVBA Excel如何删除过滤器空白行(但不是整行)并向上移动单元格
【发布时间】:2018-04-20 23:17:51
【问题描述】:

我只想删除一个非常大的电子表格中的空白单元格(而不是整行),并希望将下面的单元格向上移动。

您可以从电子表格快照中获得灵感。

有人可以帮忙吗?我正在处理非常大的电子表格。

谢谢

【问题讨论】:

  • 你会考虑非vba方法吗?
  • 是的,我愿意。我想完成这件事,最好尽可能简单:)。手动,它需要很长时间。

标签: vba excel


【解决方案1】:

您可以使用 SpecialCells,例如

Sub x()
On Error Resume Next
Range("C:D").SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
'or
Range("A1").CurrentRegion.offset(,2).resize(,2).SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
On Error GoTo 0
End Sub

On Error 是为了在没有空格的情况下避免错误。

【讨论】:

  • 我不知道,但我无法将它作为 VBA 代码运行,因为当我按 ALT + F8 时没有显示任何内容。
  • 您是否包含了 Sub/End Sub - 我没有发布完整的代码 - 但您会遇到错误。
  • 谢谢 SJR,这段代码就像一个魅力。但是,我在 F、G 列中也有空白单元格(没有在屏幕截图中显示对不起我的错)。请问是否可以将此代码仅应用于 C 和 D 列。
  • 是的,我已经修改了代码并提供了 2 个替代方案,后者可能更有效(未经测试)。
  • 是的,它奏效了。非常非常感谢你。你节省了我 15 天的工作时间。请保持好的工作状态。再次感谢(Y)
【解决方案2】:

这是一种方法。这将从工作表上的每一列中删除空白单元格

Option Explicit
Public Sub RemoveBlanks()
    Dim rng As Range
    Dim c

    Set rng = Application.InputBox("Select a range", "Get Range", Type:=8)
    If Not rng Is Nothing Then
        On Error Resume Next
        With rng.Parent
            For Each c In rng
                Range(c, c.Offset(.Cells(.Rows.Count, c.Column).End(xlUp).Row - c.Row, 0)).SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
            Next c
        End With
        On Error GoTo 0
    Else
        MsgBox "Nothing selected"
    End If
End Sub

【讨论】:

  • 要使用对话框以交互方式选择范围,您可以使用Set ThisRng = Application.InputBox("Select a range", "Get Range", Type:=8)
  • 亲爱的汤姆,感谢您的回复。我收到此代码的“未找到单元格”错误。我忘了提到我不是 excel 专家,不确定是否应该更改代码中的某些值。此外,我不想删除或移动 E、F、G、H 列中的空白单元格。谢谢
  • @Prasanna 你是对的,你可以 - 在观看我的评论后,我已经实施了你的建议
  • @watchme 这是因为它没有找到任何空白单元格。看看我的更新,这将按照 Prasanna 的建议从InputBox 获取输入
  • 亲爱的汤姆,非常感谢您的帮助。此代码也有效,但它也删除了除 C 和 D 之外的其他列中的空白单元格。我知道我的问题并不清楚。但是再次感谢你
猜你喜欢
  • 1970-01-01
  • 2013-03-26
  • 2012-03-20
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
相关资源
最近更新 更多