Excel 如果来自两个不同工作表的单元格匹配,则删除行

Excel 如果来自两个不同工作表的单元格匹配,则删除行

我在同一个工作簿中有两个不同的工作表,查询和 formonth。两个工作表的 b 列都有我想要比较的数据。如果 formonth 上的 b 列与查询工作表 b 列中的任何单元格匹配,我想删除查询工作表上的整行。我尝试了很多不同的想法,但都没有成功。

答案1

这是一个难题,很可能需要 VBA 解决方案。

该代码应该可以工作(它肯定不是最漂亮的,并且根据数据集的大小可能会很笨重)但希望将来有人可以为您提供更流畅的东西。

Sub DeleteRows()

Dim QueryRange As Range
Dim FormonthRange As Range
Dim y As Integer

Application.ScreenUpdating = False

y = Worksheets("formonth").UsedRange.Rows.Count

For Each QueryRange In Worksheets("query").Range("B1:" & "B" & y)
'This is the range of cells to check

    For Each FormonthRange In Worksheets("formonth").Range("B1:" & "B" & y)
    'This is the range of cells to compare

        If QueryRange.Value = FormonthRange.Value Then
            QueryRange.Offset(, 1).Value = "@"
            Exit For
            End If

        Next FormonthRange

    Next QueryRange

Worksheets("query").Columns("C").SpecialCells(xlConstants, 2).EntireRow.Delete

Application.ScreenUpdating = True

End Sub

如果此代码检测到您的标签与您的标签匹配,则将某一列(在本例中column C为)设置为符号。然后,它会根据包含符号的列删除行。@QueryFormonth

希望这种写法可以让你复制粘贴。你唯一需要更改的是放置@符号的列,因为它将符号放置在 B 列的偏移处。以下是几行(切换在这里输入您想要的数字在此处输入列字母

QueryRange.Offset(, EnterTheNumberYouWantHere).Value = "@"

Worksheets("query").Columns("EnterColumnLetterHere").SpecialCells(xlConstants, 2).EntireRow.Delete

其中几个典型的匹配值如下:

如果偏移量 = 1 列 = C(如上面的代码所示)
如果偏移量 = 2 列 = D
如果偏移量 = 10 列 = L
如果偏移量 = 15 列 = Q
等等。

基本上,选择电子表格中始终空白的列并从那里开始工作。

答案2

您可以使用免费的 Microsoft Excel 插件Power Query(来自 Excel 2010)选择查询表中不匹配的记录。您尝试做的是在两个表之间进行反连接

  1. 将两个数据源定义为一个表,并为其命名为 query 和 formonth。
  2. 将月份的参考表加载到 Power Query(Power Query 功能区 > 从表中)
    在高级编辑器中,您将获得类似于以下代码:

    let
        Source = Excel.CurrentWorkbook(){[Name="formonth"]}[Content]
    in
        Source
    

    转到主页 –> 关闭并加载 –> 关闭并加载到… –> 仅创建连接

  3. 然后使用左反连接合并两个表。Excelguru 的博客分别在MS 支持网站

    将表查询加载到 Power Query 并执行左反连接(M 代码下方)。

    let
        Source = Excel.CurrentWorkbook(){[Name="query"]}[Content],
        #"Merge source (anti-join)" = Table.NestedJoin(Source,
                    {"B"},formonth,{"B"},"NewColumn",JoinKind.LeftAnti),
        #"Remove columns" = Table.RemoveColumns(#"Merge source (anti-join)",{"NewColumn"})
    in
        #"Remove columns"
    

    从合并操作中删除新列
    转到主页 –> 关闭并加载 –> 关闭并加载

以下是两个数据源和 Power Query 输出之间的对比:

在此处输入图片描述

相关内容