【问题标题】:Loop through all cells and delete any zero cell (shift up)循环遍历所有单元格并删除任何零单元格(向上移动)
【发布时间】:2013-09-06 00:56:50
【问题描述】:

这似乎应该是一个相当简单的任务,但我似乎无法让它工作——我只想要一个简单的宏来循环我工作表中的所有单元格。如果单元格等于 0(或空白表示踢球),则只需将其删除,将列中的其他单元格向上移动一个。

我无法在整个文档上执行此操作,因此我尝试在单个列上执行此操作:

Sub Macro6()
'
' Macro6 Macro
'
' Keyboard Shortcut: Ctrl+q
'
For i = 81 To 1 Step -1
If Range("A" & i) = "0" Then Range("A" & i).Delete
Next i
End Sub

我不想删除任何行,只删除具有值0 的单个单元格。

但显然还是一无所获。

【问题讨论】:

  • 如果您只需点击几下就可以做到这一点,我非常感兴趣!

标签: vb.net visual-studio-2010 excel loops vba


【解决方案1】:

选择要在其中删除空格的范围。主页 > 编辑 - 查找和选择、转到特殊、空白、确定、在数组内选择、删除...、向上移动单元格、确定。

要对包含0 的单元格应用相同的过程,选择范围以删除其中的0s 并通过将它们替换为空来开始(即在上面):

首页 > 编辑、查找和选择,在查找内容中输入0,勾选匹配整个单元格内容并确保替换为:为空,全部替换。

【讨论】:

  • 我要删除的单元格不是空白,而是值为 0
  • @pnuts,当您说在数组中选择时,删除,您的意思是右键单击选定的单元格之一吗?对于删除,是功能区主页选项卡的单元格部分上的删除键还是删除按钮?
  • 好的 - ctrl+h,输入 0,将替换留空,勾选“匹配所有单元格内容”,瞧
  • + 1. 非 VBA 优于 VBA?任何一天! :P
  • :P 我知道你的意思:)
【解决方案2】:

这个小宏会同时删除空格和零:

Sub dural()
    Dim rKill As Range, r As Range
    Set rKill = Nothing
    For Each r In ActiveSheet.UsedRange
        If r.Value = 0 Or r.Value = "" Then
            If rKill Is Nothing Then
                Set rKill = r
            Else
                Set rKill = Union(rKill, r)
            End If
        End If
    Next

    If rKill Is Nothing Then
    Else
        rKill.Delete Shift:=xlUp
    End If
End Sub

正如 pnuts 指出的那样,这可能有点慢。以下可能会快一点:

Sub dural2()
    With Cells
        .Replace "0", ""
        .SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
    End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多