在excel中如果元素等于零就删除该行的方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在excel中如果元素等于零就删除该行的方法?相关的知识,希望对你有一定的参考价值。

假设要判断是否为零的元素在A列

    方法1:使用排序

    具体步骤:


    全选数据

    按照A列排序(降序)

    等于0的行自动排在最后,选中这些行直接右击删除即可。

    如果不希望排序后顺序乱了,可以在步骤1之前,

    在空白列(例如C列)输入编号(例如从1开始)

    然后在步骤3完成后,再做一次排序(按照C列升序)


    方法2:使用VBA


    Sub 删除单元格0所在行()
    Dim i
    For i = Range("A1").End(xlDown).Row To 1 Step -1
      If Range("A" & i) = 0 Then
        Rows(i & ":" & i).Delete
      End If
    Next i
    End Sub

参考技术A 选中元素所在列的顶行,使用 数据>筛选>自动筛选> 后,从小三角的选项里选中“0 ”,所有该元素等于零的行都出来了,将其全部删除,再在小三角的选项里选全部。剩下都是不为零的了。 参考技术B 假定A列是判断是否为0 的数据列,用如下VBA程序可以实现
Sub 删除0所在行()
Dim i As Long
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Range("A" & i) = 0 Then
Rows(i & ":" & i).Select
Selection.Delete Shift:=xlUp
End If
Next i
End Sub追问

是在宏命令里输入以上的语句就可以了么

追答

Alt+F11

本回答被提问者采纳
参考技术C 查找值为零的单元格,然后删除整行。追问

数据量特别大,我想通过函数来自动完成

追答

查找——全部查找,一次性完成,还能有比这更快的方法?

删除 Excel 中的特定行

【中文标题】删除 Excel 中的特定行【英文标题】:Delete Specific rows in Excel 【发布时间】:2014-09-16 13:49:20 【问题描述】:

我想创建一个 for 循环来检查我拥有的工作表中的所有行,并希望此代码能够删除某些列中包含指定内容的行(即,如果列 K 包含“June”删除该行。有没有办法对此进行编码?

*编辑 我有代码可以在一列中搜索条件,但现在我需要它来根据两列中的数据搜索和删除行。即如果K列的数据匹配单元格AJ1(已经有)并且J列的数据匹配AK1,则删除这些行。

我的代码是这样的:

Sub DeleteRows()

Sheets("Sheet1").Select
Dim rFind As Range
Dim rDelete As Range
Dim strSearch As String
Dim iLookAt As Long
Dim bMatchCase As Boolean

strSearch = Range("AJ1")


iLookAt = xlWhole
bMatchCase = False

Set rDelete = Nothing

Application.ScreenUpdating = False

With Sheet1.Columns("K:K")

    Set rFind = .Find(strSearch, LookIn:=xlValues, LookAt:=iLookAt, SearchDirection:=xlPrevious, MatchCase:=bMatchCase)
    If Not rFind Is Nothing Then
        Do
            Set rDelete = rFind
            Set rFind = .FindPrevious(rFind)
            If rFind.Address = rDelete.Address Then Set rFind = Nothing
            rDelete.EntireRow.Delete
        Loop While Not rFind Is Nothing
    End If
End With
Application.ScreenUpdating = True

结束子

【问题讨论】:

是的,有办法。尝试编写它,然后返回您的代码并描述您遇到的任何问题。或者尝试在此处搜索已经提出和回答的许多类似问题:***.com/search?q=vba+delete+rows 【参考方案1】:

作为一般经验法则,您应该尽可能避免在 Excel VBA 中循环遍历单元格。循环单元格是slow and inefficient。考虑到您的程序范围,这可能无关紧要,但这是需要考虑的事情。如果您是 VBA 编程新手,那么尽早养成良好习惯尤为重要。

这是一个解决方案,使用Range.Find 方法 (MSDN reference) 收集要删除的行范围,然后在一个语句中将它们全部删除。

Sub DeleteRows()

    Dim rngResults As Range, rngToDelete As Range
    Dim strFirstAddress As String

    With Worksheets("Sheet1").UsedRange 'Adjust to your particular worksheet

        Set rngResults = .Cells.Find(What:="June") 'Adjust what you want it to find
        If Not rngResults Is Nothing Then

            Set rngToDelete = rngResults

            strFirstAddress = rngResults.Address

            Set rngResults = .FindNext(After:=rngResults)

            Do Until rngResults.Address = strFirstAddress
                Set rngToDelete = Application.Union(rngToDelete, rngResults)
                Set rngResults = .FindNext(After:=rngResults)
            Loop

        End If

    End With

    If Not rngToDelete Is Nothing Then rngToDelete.EntireRow.Delete

    Set rngResults = Nothing

End Sub

【讨论】:

如果我希望删除的内容被引用到一个单元格(六月在单元格 AJ1 中)并且我将它插入到代码中,它不起作用。这是为什么呢? 我有点困惑。如果您希望在工作表“Sheet1”上删除包含“June”的行,这应该 这样做(我对其进行了测试,它似乎工作正常)。我不完全知道“如果我希望删除的内容被引用到单元格”是什么意思。您想通过单元格引用而不是值进行搜索?我们可能需要将lookin:=xlValues 添加到.Cells.Find(What:="June") 抱歉,措辞不佳。我希望宏在单元格包含单元格 AJ1 中的值时删除行,而不是“六月”。 您应该能够将.Cells.Find(What:="June") 更改为.Cells.Find(What:="AJ1", LookAt:=xlPart, LookIn:=xlFormulas)。这将搜索单元格的公式并查找对 AJ1 的任何引用,如果存在对 AJ1 的引用,则该行将被标记为删除。我在这里假设您正在使用公式并以某种方式引用单元格 AJ1 来获取该值。【参考方案2】:

这将处理 24000 行, 进行调整以满足您的需求:

Sub RowKiller()
    Dim K As Range, rKill As Range
    Set K = Range("K2:K4000")
    Set rKill = Nothing
    For Each r In K
        v = r.Text
        If InStr(1, v, "June") > 0 Then
            If rKill Is Nothing Then
                Set rKill = r
            Else
                Set rKill = Union(r, rKill)
            End If
        End If
    Next r

    If Not rKill Is Nothing Then
        rKill.EntireRow.Delete
    End If
End Sub

【讨论】:

以上是关于在excel中如果元素等于零就删除该行的方法?的主要内容,如果未能解决你的问题,请参考以下文章

在MATLAB中,如何找出矩阵的非零元素。并且输出它所在的行和列。只要非零就为真。输出1。。

在MATLAB中,如何找出矩阵的非零元素。并且输出它所在的行和列。只要非零就为真。输出1。。

如果numpy数组的所有元素都等于某个值,则从numpy数组中删除行/列

深入理解CSS中em, rem, ex区别,及使用技巧

深入理解CSS中em, rem, ex区别,及使用技巧

怎么判断Excel中的一整行是不是为空,并删除