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
Vba 根据列中的值删除行对_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 根据列中的值删除行对

Vba 根据列中的值删除行对,vba,excel,excel-2010,Vba,Excel,Excel 2010,试验机以两种不同的速度测试零件:50和200 rpm。机器以每种速度输出每个零件的数据,以便 第1行=50 rpm时的零件1 第2行=转速为200 rpm时的零件1 第3行=50转/分时的第2部分 第4行=200 rpm时的零件2 等等,大约23000个零件 如果特定速度的零件号失败,数据将在该行的H列中显示“n.i.O.”,但仅在该速度下显示。我正在尝试编写一个宏,该宏将检查一行是否包含“n.I.O.”值,然后删除该行以及其他速度的行。以下是我目前掌握的代码: Sub DeleteFailur

试验机以两种不同的速度测试零件:50和200 rpm。机器以每种速度输出每个零件的数据,以便

第1行=50 rpm时的零件1
第2行=转速为200 rpm时的零件1
第3行=50转/分时的第2部分
第4行=200 rpm时的零件2

等等,大约23000个零件

如果特定速度的零件号失败,数据将在该行的H列中显示“n.i.O.”,但仅在该速度下显示。我正在尝试编写一个宏,该宏将检查一行是否包含“n.I.O.”值,然后删除该行以及其他速度的行。以下是我目前掌握的代码:

Sub DeleteFailures()

Dim r As Long

Dim lastrow As Long

lastrow = Cells(Rows.Count, "A").End(xlUp).Row

For r = 1 To lastrow

    If Cells(r, "H").Value = "n.i.O." Then

        If Cells(r, "E").Value = "50" Then

            Rows(r + 1).EntireRow.Delete

            Rows(r).EntireRow.Delete

        ElseIf Cells(r, "E").Value = "200" Then

            Rows(r - 1).EntireRow.Delete

            Rows(r).EntireRow.Delete

        End If

    Else

    End If

Next

End Sub

这似乎不适合我。我想问题可能是每次删除一行时它都会跳过一行,但我不确定。还有其他更好的方法吗?

这正是你考虑的原因。要使其工作,您应该从底部开始循环:

For r = lastrow To 1 Step -1
我认为整个
For
循环块应该是这样的(已更改
ElseIf
部分):


这正是你考虑的原因。要使其工作,您应该从底部开始循环:

For r = lastrow To 1 Step -1
我认为整个
For
循环块应该是这样的(已更改
ElseIf
部分):


实际上,我正要发表评论说我已经解决了这个问题。这正是我最终要做的。当代码在200速线路上读取“n.i.O.”时,它删除了它前面的行,将所有内容索引起来,从而改变了“r”当时指的是哪一行。然后它删除了“r”行,这是应该删除的行之后的行。但是谢谢你的回答!我还有一个问题。我必须运行这个宏几次,它才能真正删除所有的“n.I.O.”行。是否有遗漏某些行的原因?有没有办法解决这个问题?你用的是我答案的副本吗?请注意,我在
ElseIf
中更改了顺序,并增加了一行。你完全正确。我没有注意到。我试过你的代码,效果很好。谢谢。实际上我正要发表评论说我已经解决了这个问题。这正是我最终要做的。当代码在200速线路上读取“n.i.O.”时,它删除了它前面的行,将所有内容索引起来,从而改变了“r”当时指的是哪一行。然后它删除了“r”行,这是应该删除的行之后的行。但是谢谢你的回答!我还有一个问题。我必须运行这个宏几次,它才能真正删除所有的“n.I.O.”行。是否有遗漏某些行的原因?有没有办法解决这个问题?你用的是我答案的副本吗?请注意,我在
ElseIf
中更改了顺序,并增加了一行。你完全正确。我没有注意到。我试过你的代码,效果很好。谢谢你,谢谢你帮我整理邮件。我不知道为什么格式会变得很奇怪。谢谢你修复我的帖子。我不知道为什么格式会变得很奇怪。