我在同一个工作簿中有两个不同的工作表,查询和 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
为)设置为符号。然后,它会根据包含符号的列删除行。@
Query
Formonth
希望这种写法可以让你复制粘贴。你唯一需要更改的是放置@
符号的列,因为它将符号放置在 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)选择查询表中不匹配的记录。您尝试做的是在两个表之间进行反连接
- 将两个数据源定义为一个表,并为其命名为 query 和 formonth。
将月份的参考表加载到 Power Query(Power Query 功能区 > 从表中)
在高级编辑器中,您将获得类似于以下代码:let Source = Excel.CurrentWorkbook(){[Name="formonth"]}[Content] in Source
转到主页 –> 关闭并加载 –> 关闭并加载到… –> 仅创建连接
然后使用左反连接合并两个表。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 输出之间的对比: