Excel 带If语句的Instr

Excel 带If语句的Instr,excel,vba,Excel,Vba,有人能指出我哪里出了问题吗 如果某些行不符合下面代码中提供的条件,我想删除它们 我尝试过使用If语句和Instr函数循环,但没有找到成功 Dim Firstrow As Integer Dim Lastrow As Integer Dim Lrow As Integer Dim celltxt As String Firstrow = 1 Lastrow = Cells(Rows.Count, 1).End(xlUp).Row For Lrow = Lastrow To Firstrow S

有人能指出我哪里出了问题吗

如果某些行不符合下面代码中提供的条件,我想删除它们

我尝试过使用
If
语句和
Instr
函数循环,但没有找到成功

Dim Firstrow As Integer
Dim Lastrow As Integer
Dim Lrow As Integer
Dim celltxt As String

Firstrow = 1
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row

For Lrow = Lastrow To Firstrow Step -1

    If InStr(Lrow, Range("ED" & Lrow), "FTOP") > 0 Then Sheets(Sheet1).Rows(Lrow).Delete

    If InStr(Lastrow, LCase(Range("DT" & Lrow)), "BB") > 0 Then Sheets(Sheet1).Rows(Lrow).Delete

    If Sheets(Sheet1).Cells(Lrow, "DX").Value = "SET" Then Sheets(Sheet1).Rows(Lrow).Delete

    If Sheets(Sheet1).Cells(Lrow, "EM").Value = "=*AAA" Then Sheets(Sheet1).Rows(Lrow).Delete

Next Lrow

没有错误消息

我已修改了宏,使其从
最后一行
循环到第2行,如果在该行的四列中的任何一列中找到值或字符串部分,则该行将被删除。使用
将所有IF语句组合成一个。从
INSTR
功能中删除
Lrow
Lastrow
,并将
AAA
放入INSTR功能中
Lrow
令人困惑,因此我删除并使用了循环的
I
变量。还添加了工作簿/工作表引用变量

Sub DeleteRowsThatMeetCriteria()
    'Declare your variables
    Dim ws As Worksheet, Lastrow As Long, i As Long

    Set ws = ThisWorkbook.Sheets("Sheet1") 'Set the worksheet
    Lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 'Assign the last row varaible

        For i = Lastrow To 2 Step -1 'Assign "i" as a long number to loop from the last row to row 2

        'Because you are testing different columns for different value and performing the same delete function,
        'you can combine each test using OR, so you only need one IF statement. I removed "Lrow and Lastrow" variables
        'because they were causing confusion and not needed inside the INSTR function. Since "SET" was the only full word
        'i did not change it. But I used INSTR for "AAA" since it was part of a string.

        If InStr(ws.Range("DT" & i), "BB") <> 0 _
            Or ws.Range("DX" & i).Value = "SET" _
            Or InStr(ws.Range("ED" & i), "FTOP") <> 0 _
            Or InStr(ws.Range("EM" & i), "AAA") <> 0 Then
            ws.Rows(i).Delete
        End If

    Next i 'DaLoop
End Sub
子删除行hatMeetCriteria()
'声明您的变量
将ws设置为工作表,最后一行设置为长,i设置为长
设置ws=ThisWorkbook.Sheets(“Sheet1”)'设置工作表
Lastrow=ws.Cells(ws.Rows.Count,1).End(xlUp).Row'分配最后一行变量
对于i=Lastrow To 2步骤-1'将“i”指定为一个长数字,以便从最后一行循环到第2行
'因为您正在为不同的值测试不同的列,并执行相同的删除功能,
'您可以使用OR组合每个测试,因此只需要一个IF语句。我删除了“Lrow和Lastrow”变量
'因为它们会造成混乱,在INSTR功能中不需要。因为“SET”是唯一完整的词
“我没有改变它。但我用INSTR表示“AAA”,因为它是字符串的一部分。
如果仪表(ws.Range(“DT”和i)、“BB”)0_
或ws.Range(“DX”&i).Value=“SET”_
或仪表(ws.Range(“ED”和i)、“FTOP”)0_
或仪器(ws.Range(“EM”和i)、“AAA”)0,然后
ws.Rows(i).删除
如果结束
下一个我是达卢普
端接头

是否确实希望
Lrow
Lastrow
作为第一个参数。也就是说,这听起来像是一个过滤器的用例,而不是一行一行地循环。所有声明为整数的变量都应该是长的,我建议使用显式选项<代码>工作表(Sheet1)
没有多大意义,您可能打算使用
工作表(“Sheet1”)
。代码中的任何地方是否存在“下一步继续时出错”的
(因为
工作表(Sheet1)
应引发错误)?如果是这样,请删除该行并修复错误。我需要从最后一行一直循环到第二行,这样标题就不会被删除。Sheets(Sheet1)是因为我想在第一张工作表中使用它,并且代码中的任何地方都没有错误。你能帮我把错误代码放在哪里吗?这不是添加错误的建议,这是一个假设,因为你的代码当前应该给出一个错误。除非您声明了包含文本字符串“Sheet1”的变量Sheet1,否则如果它没有失败,则看起来很奇怪。@TejasGoswami
Sheets(Sheet1)
肯定是错误的,无法工作,实际上它应该抛出一个错误。如果您指的是名为
Sheet1
的工作表,请使用
Sheets(“Sheet1”)
。如果您指的是选项卡列表中位置1处的工作表(无论其名称如何),请使用
Sheets(1)
。请试一试如果这不起作用,请提出您的问题并显示所有相关代码(这只是您显示的一部分)。看到了。非常感谢您对我的GMalc查询的详细回复。我对以下代码有不同的要求:或InStr(ws.Range(“EM”)和“AAA”)0然后=字符串应以AAA结尾或InStr(ws.Range(“ED”)和“FTOP”)0=字符串应以FTOP开头。还需要强调的是,根据您的上述代码,每一行都检查了BB的DT、SET的DX、FTOP的ED和AAA的EM。相反,我想要的是列ED的所有行都应该检查FTOP并删除其余的行,所有行一起应该检查DX for SET等等。我观察到的另一件事是下面的代码正在删除列ED中包含FTOP的所有行。我想要的只是保留FTOP并删除其余的行。如果仪表(ws.Range(“ED”和i)、“FTOP”)0@TejasGoswami为了澄清,您是否只想在所有四列中保留具有特定条件的行?以下是我的要求:1。过滤列“ED”并删除所有不包含“FTOP”的行。2.过滤列“DT”并删除所有不包含“BB”的行。3.过滤列“DX”并删除包含“SET”的所有行。4.过滤列“EO”并删除以“AAA”结尾的所有行。