Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 第一次出现值后删除所有行_Excel_Vba - Fatal编程技术网

Excel 第一次出现值后删除所有行

Excel 第一次出现值后删除所有行,excel,vba,Excel,Vba,我有一份a-L列数据的报告 报告中的行数是动态的 我需要删除第一列中0000004473的第一个实例之后的每一行 我看到了类似问题的代码。在我的电子表格中,宏执行相反的操作,并删除0000004473之前的每一行 Sub Sample() Dim rng As Range Dim sRow As Long, lastRow As Long With Sheets("Sheet1") 'find Terminations

我有一份a-L列数据的报告

报告中的行数是动态的

我需要删除第一列中0000004473的第一个实例之后的每一行

我看到了类似问题的代码。在我的电子表格中,宏执行相反的操作,并删除0000004473之前的每一行

Sub Sample()
    Dim rng As Range
    Dim sRow As Long, lastRow As Long

    With Sheets("Sheet1")
        'find Terminations
        Set rng = .Range("I:I").Find(what:="0000004473", after:=.Range("I1"))

        If Not rng Is Nothing Then
            '~~> Get the start row
            sRow = rng.Row + 1

            'find last row
            If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
                lastRow = .Cells.Find(what:="*", _
                    after:=.Range("I1"), _
                    Lookat:=xlPart, _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Row
            Else
                lastRow = 1
            End If
            'I use lastRow + 1 to prevent deletion "0000004773" when it is on lastrow
            .Range(sRow & ":" & lastRow + 1).Delete Shift:=xlUp
        End If
    End With
End Sub
子样本()
变暗rng As范围
变暗箭头和最后一行一样长
附页(“第1页”)
“找到终结点
设置rng=.Range(“I:I”).Find(what:=“0000004473”,后面:=.Range(“I1”))
如果不是,那么rng什么都不是
“~~>获取起始行
sRow=rng.行+1
“找到最后一行
如果Application.WorksheetFunction.CountA(.Cells)为0,则
lastRow=.Cells.Find(内容:=“*”_
之后:=.范围(“I1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lastRow=1
如果结束
'我使用lastRow+1防止在lastRow上删除“0000004773”
.Range(sRow&“:”&lastRow+1)。删除移位:=xlUp
如果结束
以
端接头

不要使用
。查找
以获取最后一行。如果在
.range(“I1”)
之前有数据,它将使用该数据作为
lastrow
值,因为一旦找到匹配项,它就会停止

如果您将
Debug.Print lastRow,sRow
放在我下面的位置,您可以看到范围

Sub Sample()
    Dim rng As Range
    Dim sRow As Long, lastRow As Long

    With Sheets("Sheet1")
        'find Terminations
        Set rng = .Range("I:I").Find(what:="0000004473", after:=.Range("I1"))

        If Not rng Is Nothing Then
            '~~> Get the start row
            sRow = rng.Row + 1

            'find last row
            If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
                lastRow = .Cells(.Rows.Count, "I").End(xlUp).Row
            Else
                lastRow = 1
            End If
            Debug.Print lastRow, sRow
            'I use lastRow + 1 to prevent deletion "0000004773" when it is on lastrow
            .Range(sRow & ":" & lastRow + 1).Delete Shift:=xlUp
        End If
    End With
End Sub
子样本()
变暗rng As范围
变暗箭头和最后一行一样长
附页(“第1页”)
“找到终结点
设置rng=.Range(“I:I”).Find(what:=“0000004473”,后面:=.Range(“I1”))
如果不是,那么rng什么都不是
“~~>获取起始行
sRow=rng.行+1
“找到最后一行
如果Application.WorksheetFunction.CountA(.Cells)为0,则
lastRow=.Cells(.Rows.Count,“I”).End(xlUp).Row
其他的
lastRow=1
如果结束
调试。打印最后一行,sRow
'我使用lastRow+1防止在lastRow上删除“0000004773”
.Range(sRow&“:”&lastRow+1)。删除移位:=xlUp
如果结束
以
端接头

假设“I”是值最多的列,如果它不使用列的任何功能。

0000004473
实际文本,还是一个格式化为显示前面的
0
的数字?其默认值为通用格式,因此始终显示零。如果我将其转换为数字,它将变为4473。尝试搜索
4473
:设置rng=.Range(“I:I”).Find(what:=4473,后面:=.Range(“I1”)`只是尝试了没有注意到任何差异,只是似乎选择了所有的值,而没有删除它们尝试
。Range(sRow&“:1040000”)。删除Shift:=xlUp
谢谢您的帮助!!!我能再要求一件事吗?我现在意识到我需要删除所有行,包括0000004473的第一个实例,而不仅仅是之后。因此,报告中有0行00000044773。您能帮忙吗?将
+1
sRow=rng.Row+1