Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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

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
Excel 如果a:J行中没有数据,尝试删除该行_Excel_Vba - Fatal编程技术网

Excel 如果a:J行中没有数据,尝试删除该行

Excel 如果a:J行中没有数据,尝试删除该行,excel,vba,Excel,Vba,如果a:J 我已经找到了这段代码并试图对其进行编辑,但这最终会删除整个工作表的数据 任何帮助都将不胜感激 Sub DeleteRows() Dim rngBlanks As Range Dim i As Integer For i = 1 To 10 On Error Resume Next Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks) On Erro

如果
a:J

我已经找到了这段代码并试图对其进行编辑,但这最终会删除整个工作表的数据

任何帮助都将不胜感激

 Sub DeleteRows()
    Dim rngBlanks As Range
    Dim i As Integer

    For i = 1 To 10
        On Error Resume Next
        Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks)
        On Error GoTo 0
        If Not rngBlanks Is Nothing Then
            rngBlanks.EntireRow.Delete
        End If
    Next
 End Sub
如果a:J行中没有数据,尝试删除该行

代码所做的是单独检查列,而不是标题所示的范围
A:J
。您的整个数据很可能因此而被删除。假设
A1
有一些数据,但
B1
没有。因此,您的代码将删除
行1
。您需要做的是检查say
A1:J1
是否为空

我想这就是你想要的

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim rngBlanks As Range
    Dim i As Long, lRow As Long, Ret As Long

    '~~> Set this to the relevant worksheet
    Set ws = ThisWorkbook.Sheets("Sheet2")

    With ws
        '~~> Get the last row in that sheet
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            lRow = .Cells.Find(What:="*", _
                          After:=.Range("A1"), _
                          Lookat:=xlPart, _
                          LookIn:=xlFormulas, _
                          SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious, _
                          MatchCase:=False).Row
        Else
            lRow = 1
        End If

        '~~> Loop through the rows to find which range is blank
        For i = 1 To lRow
            Ret = Application.Evaluate("=COUNTA(A" & i & ":J" & i & ")")
            If Ret = 0 Then
                If rngBlanks Is Nothing Then
                    Set rngBlanks = .Rows(i)
                Else
                    Set rngBlanks = Union(rngBlanks, .Rows(i))
                End If
            End If
        Next i
    End With

    '~~~> Delete the range
    If Not rngBlanks Is Nothing Then rngBlanks.Delete
End Sub
选项显式
子样本()
将ws设置为工作表
变暗rngBlanks作为范围
暗我一样长,浅我一样长,浅我一样长
“~~>将其设置为相关工作表
设置ws=ThisWorkbook.Sheets(“Sheet2”)
与ws
“~~>获取该表中的最后一行
如果Application.WorksheetFunction.CountA(.Cells)为0,则
lRow=.Cells.Find(内容:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lRow=1
如果结束
“~~>在行中循环查找哪个范围为空
对于i=1至lRow
Ret=Application.Evaluate(“=COUNTA(A“&i&”:J“&i&”)
如果Ret=0,则
如果rngBlanks不算什么,那么
设置rngBlanks=.Rows(i)
其他的
设置rngBlanks=Union(rngBlanks、.Rows(i))
如果结束
如果结束
接下来我
以
“~~~>删除范围
如果不是rngBlanks,则rngBlanks.Delete
端接头

另一种方法是使用Autofilter删除那些范围

我在代码中使用了一个表格,a:J列中有一些非空白单元格,一直到第15行。第16:18行完全为空,D19=1。您想从A:J中删除每个单元格中都有空格的行

在For..Next循环的第一次迭代中,rngBlanks不是什么都不是,因为键入

?rngBlanks.address
返回$A$1,$A$5:$A$19。A2:A4不是空白的。当你执行

Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks)
它在A列中查找您不想测试的任何空格。您希望测试每一行,可能是ActiveSheet.UsedRange中的每一行,以查看A:J列是否全部为空。所以你需要定义一个变量

Dim Rw as Range
并在UsedRange中遍历每个Rw

For Each Rw in ActiveSheet.UsedRange
如果工作表function.CountBlank(范围(单元格(Rw,1),单元格(Rw,10))=0,则

    Rw.EntireRow.Delete

我可以在这里发布整个代码,但我给出的应该会让您走上正确的轨道。

您要删除哪一行?每次删除一行的代码需要向后迭代,否则会跳过行。此外,它应该是
rw.row
,否则会出现运行时错误。此外,空格的计数应为10。还有其他问题,但你明白了:)-1.