如果单元格为空,则删除行

时间:2019-01-24 12:48:39

标签: excel vba

我的工作表中有两个工作表:Sheet1和Sheet2。 Sheet1允许用户输入文件位置,然后要求后者选择一个范围,然后将数据导入到sheet2中。但是,有2个空白单元格(显然可以手动删除),但是我正在尝试使该过程自动化,但是下面的代码告诉我没有找到任何单元格。

Sum DeleteRows()
Dim SrchNom
Dim Tb as Range

'we get sheet on which data has been copied

Set Tb = Sheet1.Range("E9")

Set SrchNom = Worksheets(Tb.Value).Range("J1", Worksheets(Tb.Value).Range("J1048576").End(xlUp))

SrchNom.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End sub

如果工作表Tb的J列中的一个单元格为空白,我希望能够删除整行。我如何修改此代码以执行我想做的事情?

2 个答案:

答案 0 :(得分:0)

尝试:

Sub DeleteRows()
    Worksheets(Sheets(1).Cells(9, 5).Value).Columns("J").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

如果由于换行符,空格或组合而遇到的空白单元格实际上不是空白的,您可能会发现针对this问题的答案很有趣。

可能是这种情况,也知道您可以向后遍历一个范围,删除J列可能满足某些条件的所有行,可能是Chr(10)Chr(32)

答案 1 :(得分:0)

您可以使用此代码,只需将(.Rows(row))替换为您的范围

Public Sub deleteRows()

Dim wks As Excel.Worksheet
Dim rng As Excel.Range
Dim row As Long
Dim lastRow As Long

Set wks = Excel.ActiveSheet
lastRow = Range("A" & Rows.count).End(xlUp).row

With wks
    For row = 1 To lastRow
        If Application.WorksheetFunction.CountA(.Rows(row)) = 0 Then
            If rng Is Nothing Then
                Set rng = .Rows(row)
            Else
                Set rng = Excel.Union(rng, .Rows(row))
            End If
        End If
    Next row
End With

'In order to avoid Run-time error check if [rng] range is not empty, before removing it.
If Not rng Is Nothing Then
    Call rng.EntireRow.Delete
End If
End Sub