Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果列H包含以下任何值,则删除行-VBA_Vba_Excel - Fatal编程技术网

如果列H包含以下任何值,则删除行-VBA

如果列H包含以下任何值,则删除行-VBA,vba,excel,Vba,Excel,如果H列包含以下任何值,我想删除一行: 1) % 2) Resistor 3) Capacitor 4) MCKT 5) Connector 6) anything else I may want to add to this list... 在谷歌上找到并编辑了这个——效果很好——不确定是否有更有效的方法 Sub DeleteRows() lastrow = Cells.SpecialCells(xlCellTypeLastCell).Row readrow = 1 For n = 1 to

如果H列包含以下任何值,我想删除一行:

1) %
2) Resistor
3) Capacitor
4) MCKT
5) Connector
6) anything else I may want to add to this list...
在谷歌上找到并编辑了这个——效果很好——不确定是否有更有效的方法

Sub DeleteRows()
lastrow = Cells.SpecialCells(xlCellTypeLastCell).Row
readrow = 1
For n = 1 to lastrow
  If Range("H" & ReadRow).Value = "%" Or _
    Range("H" & ReadRow).Value = "Resistor" Or _
    Range("H" & ReadRow).Value = "Capacitor" Or _
    Range("H" & ReadRow).Value = "MCKT" Or _
    Range("H" & ReadRow).Value = "Connector" Then
    Range("H" & ReadRow).EntireRow.Delete
    Else
      readrow = readrow + 1
    End If
  Next
End Sub

有更有效的方法,但使用此方法:

向后循环。 将ReadRow更改为n,没有意义使用两个变量: 代码:

另一种方法是使用selectcase

它使添加到列表中变得更容易。

这非常有效

Option Explicit
Option Compare Text

Sub Delete_Rows()

Dim LastRow As Long, ReadRow As Long, n As Long

With ThisWorkbook.Sheets("Sheet1")
    LastRow = .Cells(.Rows.Count, "H").End(xlUp).row
End With

ReadRow = 1
For n = 1 To LastRow
  If Range("H" & ReadRow).Value Like "*%*" = True Or _
    Range("H" & ReadRow).Value Like "*Resistor*" = True Or _
    Range("H" & ReadRow).Value Like "*Transistor*" = True Or _
    Range("H" & ReadRow).Value Like "*Micro*" = True Then
      Range("H" & ReadRow).EntireRow.Delete
    Else
      ReadRow = ReadRow + 1
    End If
  Next
End Sub

堆栈溢出不是免费的代码编写服务。你尝试过什么?如果我是你,我会学习如何使用循环步骤1的目的是什么?你不想让它从第一排排到最后一排…而不是最后一排-1吗@Scott CranerDisregard我之前的评论-我知道你在做什么-从最后一排向上到第一排向下的目的是什么@斯科特Craner@CC268当你删除一行,比如说第10行,那么原来的第11行变成了第10行,当它迭代时,n从10变为11,原来的第11行和现在的第10行被跳过。通过后退,它没有跳过行的问题。尝试了两种代码-都不起作用-我认为搜索条件可能不太正确?如果它在单元格中的任何位置找到这些单词,我只需要它删除该行。我不希望它区分大小写。例如,在某些电池中,它可能是电阻器,另一个可能是电阻器。也许我会尝试在结尾添加一个星号,看看这是否有助于@Scott CranerAlso,因为它与您的rown有问题。删除-表示未定义子项或函数
Sub DeleteRows()
Dim Lastrow as long, n as long
lastrow = Cells.SpecialCells(xlCellTypeLastCell).Row

For n =  lastrow to 1 Step -1

  Select Case Range("H" & n).Value 
      Case "%","Resistor","Capacitor","MCKT","Connector"
        Rows(n).Delete
  End Select
Next
End Sub
Option Explicit
Option Compare Text

Sub Delete_Rows()

Dim LastRow As Long, ReadRow As Long, n As Long

With ThisWorkbook.Sheets("Sheet1")
    LastRow = .Cells(.Rows.Count, "H").End(xlUp).row
End With

ReadRow = 1
For n = 1 To LastRow
  If Range("H" & ReadRow).Value Like "*%*" = True Or _
    Range("H" & ReadRow).Value Like "*Resistor*" = True Or _
    Range("H" & ReadRow).Value Like "*Transistor*" = True Or _
    Range("H" & ReadRow).Value Like "*Micro*" = True Then
      Range("H" & ReadRow).EntireRow.Delete
    Else
      ReadRow = ReadRow + 1
    End If
  Next
End Sub