在excel中如果元素等于零就删除该行的方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在excel中如果元素等于零就删除该行的方法?相关的知识,希望对你有一定的参考价值。
假设要判断是否为零的元素在A列
方法1:使用排序
具体步骤:
全选数据
按照A列排序(降序)
等于0的行自动排在最后,选中这些行直接右击删除即可。
如果不希望排序后顺序乱了,可以在步骤1之前,
在空白列(例如C列)输入编号(例如从1开始)
然后在步骤3完成后,再做一次排序(按照C列升序)
方法2:使用VBA
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
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】:
这将处理 2 到 4000 行, 进行调整以满足您的需求:
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。。