删除重复项,其中同一行中另一列的值= 0

Justinua

我有一个包含约30k数据行和20列的工作表。B列中的许多值都是重复项,我想删除这些重复项。我的问题是,即使b列可能是重复的,其余列中的行数据也不一定是重复的,因此重要的是我们仅在B列中的值是重复AND时才删除该行。 M列中的值= 0。

有没有一种方法可以对工作表中的每一行执行此操作(工作表名称为Test)?我想它涉及“ For Each ...”,但是我对此没有太多经验,也无法找到其他任何可以完成此任务的宏。让我知道您是否需要我详细说明我要完成的工作。

谢谢你的帮助!

晶体管1

这是VBA中的一种简单方法,可以像表格一样查询电子表格。您必须针对特定情况调整RunQuery()方法,因为我不知道您的列名。

这假定以下条件:

  1. 您的工作表的布局像表格一样,列名位于第1行,数据位于其下方
  2. 运行此代码之前,您已经保存了工作簿。

在我的特定工作簿中,我有一个标记为“类别”的列,一个标记为“类型”的列,并且添加了一个称为“ DeleteMe”的列。

'Adapt RunQuery for your particular needs
Sub RunQuery()
    'Change this SQL statement to reflect your particular need
    SQL = "SELECT [Category], [Types] FROM %table(0)% GROUP BY [Category], [Types] HAVING Count(*) > 1"

    'Change "Sheet2" to your sheet name
    Set rs = QuerySheet(SQL, Sheet2)

    Do While Not rs.EOF
        SQL = "UPDATE %table(0)% SET [DeleteMe]='x' WHERE [Category]='" & rs!Category & "' AND [Types]='" & rs!Types & "'"
        'Again, change Sheet2 to your sheet name
        QuerySheet SQL, Sheet2
        rs.MoveNext
    Loop
End Sub

'You don't need to change this function
Function QuerySheet(sSQL, ParamArray Worksheets())
    Dim oSh
    Dim sConn, n

    On Error GoTo QuerySheet_Err
    Set QuerySheet = CreateObject("ADODB.Recordset")
    sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Worksheets(0).Parent.FullName & ";Extended Properties=""Excel 8.0;HDR=Yes"";"

    n = 0
    For Each oSh In Worksheets
        sSQL = Replace(sSQL, "%table(" & n & ")%", "[" & oSh.Name & "$]")
        n = n + 1
    Next
    QuerySheet.Open sSQL, sConn
    Exit Function

QuerySheet_Err:
    MsgBox "Error in QuerySheet(): " & Err.Description
    End
End Function

资源

该代码用x更新“ DeleteMe”列。现在,您可以按“ DeleteMe”进行排序,并删除行(或编写一个简单的VBA语句来做到这一点)。

您的RunQuery()方法将看起来更像这样,用工作表标题行中字段的名称替换“ B列”和“ M列”:

    ...

    'Change this SQL statement to reflect your particular need
    SQL = "SELECT [column B] FROM %table(0)% WHERE [column M] = 0 GROUP BY [column B] HAVING Count(*) > 1"

    'Change "Sheet2" to your sheet name
    Set rs = QuerySheet(SQL, Sheet2)

    Do While Not rs.EOF
        SQL = "UPDATE %table(0)% SET [DeleteMe]='x' " & _
           " WHERE " & _
           IIf(IsNull(rs![column B]), _
               " [column B] IS NULL", _
               " [column B]='" & rs![column B] & "' ") & _
           " AND [column M]=0"

        'Again, change Sheet2 to your sheet name
        QuerySheet SQL, Sheet2

    ...

注意:有时,当您将工作表的名称从“ Sheet1”更改为其他名称时,您会收到调试错误...尚未解决该问题。但这对于“ Quick N'Dirty”查询非常有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果同一行中的另一个单元格的值大于0,则仅索引另一张工作表中一列的单元格

Python / Pandas:如果值是NaN或0,则用同一行中下一列的值填充

Pandas groupby 根据另一列中的值(0 或 1)选择最后一行或倒数第二行

SQL查询以选择记录在其中一列中值为= 0且在另一列中具有唯一ID的行

查找所有重复单元格,确定是否存在与重复项匹配的值,填写重复行单元格的下一列值为 0

SQLITE - 如果一列为空,则另一列中的值为 0

撇取摘要中,无法选择一列中具有0且另一列中的值不同于0的行

如果给定的一组列中的所有值都为 0,如何删除一行

TSQL-比较两列的值并将0或1加到同一张表的另一列

熊猫:用第一列中的下一个非零值替换第一行中的所有0?

MySQL-选择列值仅为0的行,按另一列分组?

根据另一列(Python,Pandas)中的值删除一列的重复项

如何根据另一列的值查找和删除一列中的重复项?

重击:查找一列中的重复项,根据另一列的比较删除行

我如何找到同一列中每个重复项的最后一行索引?

如果另一列符合条件,则在列值重复时删除一行

列中的条件值以更改另一列的同一行中的值

SUM 一列然后减去另一列的 SUM 并获得值 0 而不是负值

PHP / SQL-从所有列中选择,其中另一列= 0

根据另一列中的值删除一列中重复的行

根据另一列的值删除重复项

如何在一个列中添加在另一列中具有“ 0”的值

当 NumericUpDown 的值等于 0 时删除 DataDridView 中的一行

从文件的同一行中删除重复项

根据Pyspark中另一列的值,有条件地从同一列的另一行值替换一行中的值?

根据同一行中另一列的值填充缺失值

在同一行的另一列中为您命名的值查找相应的值

在熊猫的CSV的另一列中创建基于数字行值分配的字符串值的新列会返回错误:“ KeyError:0”

如何删除与熊猫中另一列中的值相关的列中的重复项?