Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Excel 更改VBA函数以删除行_Excel_Vba - Fatal编程技术网

Excel 更改VBA函数以删除行

Excel 更改VBA函数以删除行,excel,vba,Excel,Vba,我有下面的VBA函数,它将查找输入框中键入的信息,并删除具有该值的每一行 如何将其更改为删除除您输入的值之外的所有行。示例I输入123。我希望它删除所有行,除了B列中带有123的单元格 Sub DeleteRows() Dim c As Range Dim SrchRng As Range Dim SrchStr As String Set SrchRng = ActiveSheet.Range("B1", ActiveSheet.Range("B4343").

我有下面的VBA函数,它将查找输入框中键入的信息,并删除具有该值的每一行

如何将其更改为删除除您输入的值之外的所有行。示例I输入123。我希望它删除所有行,除了B列中带有123的单元格

Sub DeleteRows()
    Dim c As Range
    Dim SrchRng As Range
    Dim SrchStr As String

    Set SrchRng = ActiveSheet.Range("B1", ActiveSheet.Range("B4343").End(xlUp))
    SrchStr = InputBox("Please Enter Value")
    Do
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing

End Sub

好的,也许有更好的方法可以做到这一点,但是我创建了一个临时工作表,复制与搜索匹配的行,清除工作表中的所有行,最后复制回匹配的行,然后删除临时工作表:

Sub DeleteRows()
    Dim c As Range, b As Range, SrchRng As Range, SrchStr As String, MasterSheet As Worksheet, TempSheet As Worksheet
    Set MasterSheet = ActiveSheet
    Set SrchRng = ActiveSheet.Range("A1", ActiveSheet.Range("A4343").End(xlUp))
    SrchStr = InputBox("Please Enter Value")
    Worksheets.Add
    Set TempSheet = ActiveSheet
    MasterSheet.Select
    Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
    Set b = c
    Do
        If Not c Is Nothing Then
            c.EntireRow.Copy
            TempSheet.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll
        End If
        Set c = SrchRng.FindNext(After:=c)
        If c.Address = b.Address Then Exit Do
    Loop While Not c Is Nothing
    Range("A2:A" & Rows.Count).EntireRow.ClearContents
    TempSheet.Range("A2:A" & TempSheet.Range("A" & Rows.Count).End(xlUp).Row).EntireRow.Copy
    ActiveSheet.Range("A2:A" & TempSheet.Range("A" & Rows.Count).End(xlUp).Row).PasteSpecial xlPasteAll
    Application.DisplayAlerts = False
    TempSheet.Delete
    Application.DisplayAlerts = True
End Sub
希望有帮助

我开始尝试从搜索结果中一次填充一个数组,但没有循环,但效果不好,很遗憾,我已经没有多余的时间来进一步探索这个问题。我的想法是尝试一次性从结果填充一个数组,然后选择所有行减去联接数组中的任何行,然后删除。不确定这有多可能,但如果你有时间的话,也许可以探索一下

我的测试数据使用A列,您需要更改B列的一些部分