删除excel中跨行在多个单元格中包含单个字母的行

删除excel中跨行在多个单元格中包含单个字母的行,excel,excel-formula,vba,Excel,Excel Formula,Vba,我想知道是否有一个解决方案,只是通过一个公式或快捷方式,或者如果它是我需要使用VBA的东西。我正在使用的电子表格包含112行、31列和33行,其中包含一个“Y”(Y=正,用于此报告)。我试图删除整行(E-AA列)中不包含单个“Y”的行,因此只有行中某处包含“Y”的行和人员的姓名才会保留在电子表格中。我从其他人那里找到了一段VBA代码,它产生了一些成功的结果,但并没有包含每一行的“Y”(我统计了33行的Y,VBA代码只显示了14行) 我使用的代码是: Sub sbDelete_Rows_IF_C

我想知道是否有一个解决方案,只是通过一个公式或快捷方式,或者如果它是我需要使用VBA的东西。我正在使用的电子表格包含112行、31列和33行,其中包含一个“Y”(Y=正,用于此报告)。我试图删除整行(E-AA列)中不包含单个“Y”的行,因此只有行中某处包含“Y”的行和人员的姓名才会保留在电子表格中。我从其他人那里找到了一段VBA代码,它产生了一些成功的结果,但并没有包含每一行的“Y”(我统计了33行的Y,VBA代码只显示了14行)

我使用的代码是:

Sub sbDelete_Rows_IF_Cell_Contains_String_Text_Value()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 112
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 5).Value = "N" Then
            Rows(iCntr).Delete
        End If
    Next
    End Sub
上述代码产生了以下结果:


单元格中包含“Y”或“N”的相关列是E列到AA列。如果我不够清楚或者需要更深入地了解细节,请告诉我

这将完成手头的工作,尽管我相信它可以进一步优化:

Sub foo()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 112
    For iCntr = lRow To 1 Step -1
        For i = 5 To 27 Step 2
        If Cells(iCntr, i).Value = "N" Then
            Value = Value & " Delete"
        Else
            Value = Value & " Keep"
        End If
        Next i

        If Not InStr(Value, "Keep") > 0 Then
            Rows(iCntr).Delete
        End If
        Value = ""
    Next iCntr
End Sub

这将完成手头的工作,尽管我相信它可以进一步优化:

Sub foo()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 112
    For iCntr = lRow To 1 Step -1
        For i = 5 To 27 Step 2
        If Cells(iCntr, i).Value = "N" Then
            Value = Value & " Delete"
        Else
            Value = Value & " Keep"
        End If
        Next i

        If Not InStr(Value, "Keep") > 0 Then
            Rows(iCntr).Delete
        End If
        Value = ""
    Next iCntr
End Sub

要使用公式、过滤和复制/粘贴进行此操作,请执行以下操作:

将此公式添加到每行:
=COUNTIF($E2:$AA2,“Y”)

这将单独计算包含一个Y的单元格

在数据中添加筛选器,并在公式中排除
0

将筛选后的数据集复制并粘贴到新工作表。然后可以清除原始数据并重新粘贴到其上。如果你只做一次,这很有用

编辑:

要在VBA中执行上述步骤(但执行就地删除而不是移动到第二张图纸):


要使用公式、过滤和复制/粘贴进行此操作,请执行以下操作:

将此公式添加到每行:
=COUNTIF($E2:$AA2,“Y”)

这将单独计算包含一个Y的单元格

在数据中添加筛选器,并在公式中排除
0

将筛选后的数据集复制并粘贴到新工作表。然后,您可以清除原始数据并重新粘贴到它上。如果你只做一次,这很有用

编辑:

要在VBA中执行上述步骤(但执行就地删除而不是移动到第二张图纸):


在循环中,使用COUNTIF来计算Y的数量,如果Y等于零,则删除该行。在循环中,使用COUNTIF来计算Y的数量,如果Y等于零,则删除该行。@KyleC请将我的回答标记为答案?谢谢。当然,我打了复选框,所以如果它没有显示为回答,请让我知道,再次感谢。@KyleC请您将我的回答标记为回答好吗?谢谢。当然,我打了复选框,所以如果它没有显示为回答,请让我知道,再次感谢。