【问题标题】:How to delete the rows based in excel sheet using column values如何使用列值删除基于Excel工作表中的行
【发布时间】:2019-09-09 15:14:51
【问题描述】:

我有 5 张不同的工作表。 sheet3 和 sheet4 我想根据单列单元格值删除行。 在表 3 中,如果 H2="#N/A" 和 H503="#N/A" 则我想删除基于 H 列单元格值的行,然后删除整行。 在表 4 中,如果 B2="320857876",B3="32085678",B4="12133435" 我想根据 b 列单元格值删除行,则删除 B 列单元格值以 302 开头的整行。 我想从“C”列中删除所有数据 我的excel表是这样的

Using excel file

Sub Create()
  Dim LastRow As Long
  Dim i As Long

  LastRow = Range("B10000").End(xlUp).Row
  For i = LastRow To 1 Step -1
    If Range("B" & i) = "#N/A" Then
        Range("B" & i).EntireRow.Delete
    End If
  Next
End Sub

【问题讨论】:

    标签: excel vba row cell


    【解决方案1】:
    Sub delete_rows()
    
        Dim sheet As Worksheet, cell As Range
    
        Count = 1
        For Each sheet In ThisWorkbook.Worksheets
            If Count = 3 Then
                lastrow = sheet.Cells(sheet.Rows.Count, "H").End(xlUp).Row
                Set Rng = sheet.Range("H1:H" & lastrow)
    
                For i = Rng.Cells.Count To 1 Step -1
                    If Application.WorksheetFunction.IsNA(Rng(i).Value) Then
                        Rng(i).EntireRow.Delete
                    ElseIf Rng(i).Value = "#NA" Then
                        Rng(i).EntireRow.Delete
                    End If
                Next
    
            ElseIf Count = 4 Then
                lastrow = sheet.Cells(sheet.Rows.Count, "B").End(xlUp).Row
                Set Rng = sheet.Range("B1:B" & lastrow)
                Debug.Print (Rng(4).Text)
    
                If Rng(2).Value = "320857876" And Rng(3).Value = "32085678" And Rng(4).Value = "12133435" Then
                    For i = Rng.Cells.Count To 1 Step -1
                        If Left(Rng(i).Value, 3) = "302" Then
                            Rng(i).EntireRow.Delete
                        End If
                    Next
                End If
    
                lastrow = sheet.Cells(sheet.Rows.Count, "C").End(xlUp).Row
                Set Rng = sheet.Range("C1:C" & lastrow)
    
                For Each cell In Rng
                    cell.Value = ""
                Next cell
    
            End If
    
            Count = Count + 1
    
        Next
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      您在那里有一些要求,并且您的代码相当简单,但是对于其中的 #N/A 部分,您不能只使用值方法测试该文本,这是为范围返回的默认属性对象。

      Sub Create()
          Dim LastRow As Long, i As Long
      
          LastRow = Range("B10000").End(xlUp).Row
      
          For i = LastRow To 1 Step -1
              If Range("B" & i).Text = "#N/A" Then
                  Range("B" & i).EntireRow.Delete
              End If
          Next
      End Sub
      

      ...您需要使用 .Text 才能使其工作,或者,If IsError(Range("B" & i)) Then 是另一种方法。

      您的其余要求只是逻辑。您的其余代码相对完善,因此您只需要完成它即可。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2019-02-14
        • 2021-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多