当前位置: 首页 > 知识库问答 >
问题:

通过使用vba检查相邻列值删除整行

松英喆
2023-03-14

我有一个表,在B列中有大约500行的字符串,在a列和C列到M列中有空的单元格/填充了值。

我编写了一个宏,它将获取B列中每一行的字符串值,如果该行的相邻单元格(从C列到M列)为空,那么它将删除整个行。但是,即使相邻单元格中的任何一个有值,它也会跳过该行。

这是我的床单看起来像

 A      B           C   D   E   F   G   H   I   J   K   L   M
1.2   SERVER_P             RE1                         GR5 
7.3   PROXY NET
4.5   NET CON V1                        GR

应该删除整个2行,因为coulms C到M为空。我给出了上面的三行示例,但我的工作表包含大约500行数据。

这是我现在拥有的

Dim rcount As Long, ccount As Long
Dim Count As Long, Lastrow As Long
Dim Targetname As String, Deletedname As String
Dim objFSObject As Object

Set objFSObject = CreateObject("Scripting.FileSystemObject")

Count = 0
Sheets("Sheet2").Activate

With ActiveSheet
    'count the rows till which strings are there
    Lastrow = .Cells(.Rows.Count, "B").End(xlUp).Row
End With

For rcount = 1 To Lastrow
    Targetname = Cells(rcount, 2).Value
    Count = 0                     'reset the counter 
    Cells(rcount, 2).Select
    For ccount = 1 To 11
        Deletedname = ActiveCell.Offset(0, ccount).Value
        If Len(Trim$(Deletedname)) > 0 Then
            ccount = 11
        Else
            Count = Count + 1
            If Count = 11 Then
                Rows(rcount).EntireRow.Delete
            End If
        End If
    Next ccount
Next rcount

但是我的宏删除了很多符合条件的行,即C到M是空的,但很少的行仍然没有被删除,它们的单元格也是空的,从C到M列。

有人能帮我做这个吗。

共有1个答案

盖玉石
2023-03-14

借助上面的@Logan Reed评论

  Dim rcount As Long, ccount As Long
  Dim Count As Long, Lastrow As Long
  Dim Targetname As String, Deletedname As String
  Dim objFSObject As Object

  Set objFSObject = CreateObject("Scripting.FileSystemObject")

  Count = 0
  Sheets("Sheet2").Activate

  With ActiveSheet
     'count the rows till which strings are there
     Lastrow = .Cells(.Rows.Count, "B").End(xlUp).Row
  End With

  For rcount = Lastrow to 1 Step -1
    Targetname = Cells(rcount, 2).Value
    Count = 0                     'reset the counter 
    Cells(rcount, 2).Select
      For ccount = 1 To 11
         Deletedname = ActiveCell.Offset(0, ccount).Value
         If Len(Trim$(Deletedname)) > 0 Then
             ccount = 11
         Else
             Count = Count + 1
             If Count = 11 Then
                Rows(rcount).EntireRow.Delete
             End If
         End If
      Next ccount
  Next
 类似资料:
  • 我有一个数组,如下所示 我需要从数组中删除classId为2或4的元素,预期的结果应该是 我如何做到这一点而不使用一个循环。希望有人能帮助

  • 问题内容: 我有ArrayList,我要从中删除具有特定值的元素… 例如 我知道我们可以遍历arraylist和.remove()方法来删除元素,但是我不知道如何在迭代时做到这一点。如何删除具有“ acbd”值的元素,即第二个元素? 问题答案: 在您的情况下,无需遍历列表,因为您知道要删除哪个对象。您有几种选择。首先,您可以按索引删除对象(因此,如果您知道,该对象是第二个列表元素): 然后,您可以

  • 问题内容: 我发现了一个有趣的功能,称为delete by query 。我如何在jest客户程序中使用它? 谢谢! 问题答案: 您可以使用如下所示的类: 另请注意,如果您运行的是ES 2.x或更高版本,则需要先从插件安装Delete by query API 。

  • 问题内容: 在我的Task模型的索引页面上,我想为与Task数据库表中的布尔字段“ complete”相对应的每一行显示一个复选框。 当前,我的代码进入方法“ Complete”,但其中不包含用户刚刚执行的复选框的值(即,如果他们只是选中了该框,则不会将其传递给我的“ Complete”方法)。 如何传递用户刚刚执行的值-选中还是未选中? /views/tasks/index.html.erb /

  • 问题内容: Google Python类| 清单练习- 给定一个数字列表,返回一个列表,其中所有相邻的==元素都已简化为单个元素,因此[1、2、2、3]返回[1、2、3]。您可以创建一个新列表或修改传入的列表。 我使用新列表的解决方案是- 问题甚至暗示可以通过修改传入列表来完成。但是,python文档警告不要在使用for循环迭代列表时修改元素。 我想知道除了遍历列表之外还能做些什么呢?我不是在寻找

  • 我有一个\u索引:varnish\u日志和\u类型:varnish 具有两个不同值的字段“server”:“India”和“server”:“usa” 现在我只想删除在美国的记录。 我试过用 $curl-XDELETE'http://localhost:9200/_all/_query?q=server:美国' 响应:未找到uri[]和方法的处理程序[DELETE] 请告诉我哪里错了