excel - Excel - 如果特定列中的单元格包含在另一列中找到的值,则删除行
问题描述
如果在另一列中找到供应商列中的值,我想删除所有行。(lookupVendor Col 在另一张表中)
MainSheet
LookupColumn
VendorCol
google
microsoft
apple
vendorA
VendorB
这是我所拥有的,但它只删除一个值。如何让它使用整个 LookupColumn 并检测在 lookupColumn 中找到 colc 值的任何行。我的简单 VBA 代码一次处理一个值。(效率不高)
Sub Find_Vendor()
Dim rng As Range
Dim what As String
what = "Microsoft"
Do
Set rng = ActiveSheet.UsedRange.Find(what)
If rng Is Nothing Then
Exit Do
Else
Rows(rng.Row).Delete
End If
Loop
End Sub
Mainsheet:包含 600,000 行 LookupColumn 包含 400 个条目。对于我拥有的大量数据,现有代码非常慢。
解决方案
使用自动过滤器():
Option Explicit
Public Sub Find_Vendor()
Dim filters As Variant
With Sheets("LookupColumnSheet") ' change "LookupColumnSheet" to your actual sheet with lookup values name
filters = Application.Transpose(.Range("A1", .Cells(.Rows.Count, 1).End(xlUp)).Value) ' collect "LookupColumnSheet" sheet column A values from row 1 down to last not empty row
End With
With Sheets("MainSheet") 'reference "MainSheet" sheet (change "MainSheet" to your actual "MainSheet" sheet name
With .Range("C1", .Cells(.Rows.Count, 3).End(xlUp)) ' reference referenced sheet column C cells from row 1 down to last not empty one
.AutoFilter Field:=1, Criteria1:=filters, Operator:=xlFilterValues ' filter referenced range with values from "LookupColumnSheet" sheet column A
If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete ' if any filtered cells other than header then delete their entire row
End With
.AutoFilterMode = False ' remove filters
End With
End Sub
推荐阅读
- angular - 角度材料引导程序,如网格 mat-grid-list
- game-engine - 将来自玩家的物品添加到瓷砖地图 godot
- javascript - PUT 请求中的错误(Angular 4 w/NodeJs API REST)
- java - Google Sheets API 在 APK 的发布版本中返回 null
- python - 单击交互按钮后更新或删除临时消息
- android - 从我的 Android 应用程序查看 PDF
- python - 在张量流中扩展维度和复制数据
- ios - 将地址传递给 firebase 实时数据库
- javascript - 使用 MomentJS 从 JavaScript 发布到 C# 时的日期解析问题
- ios - 在 Swift 中将字符串转换为日期