【问题标题】:Delete row if cell is blank如果单元格为空,则删除行
【发布时间】:2019-06-18 05:06:18
【问题描述】:

我的工作表中有两张工作表;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 列中的一个单元格为空白,我希望能够删除整行。如何修改此代码以能够执行我想要执行的操作?

【问题讨论】:

  • 它们可能不是空白的,可能有空格或隐藏字符。
  • 你是对的。如果在 Excel 表上,我输入 IF(ISBLANK(J2);"ok","ko"),它告诉我单元格不是空白的。关于如何通过 vba 从我的工作表中删除这些单元格的任何想法?
  • =len(j2) 返回什么?

标签: excel vba


【解决方案1】:

试试:

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

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

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

【讨论】:

    【解决方案2】:

    您可以使用此代码,只需将 (.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
    

    【讨论】:

      猜你喜欢
      • 2022-11-24
      • 1970-01-01
      • 2022-07-05
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多