【发布时间】:2018-12-10 13:57:45
【问题描述】:
我每周都会收到一份 Excel 文档,其中列出了尚未完成我们正在获得的新 IT 系统培训的员工名单。但是,培训并不是对每个人都有用,所以我需要清理才能得到真实的数字。
我已经列出了与培训无关的员工列表(Oprydning),并使用以下代码一次搜索一个名称并从另一个列表中删除(Datagrundlag)。
Private Sub RydOpKnap_Click()
Dim OprydningAntal As Long
Dim DataAntal As Long
Dim Find As String
Worksheets("Datagrundlag - endelig").Visible = True
OprydningsAntal = Worksheets("Oprydning").UsedRange.Rows.Count
DataAntal = Worksheets("Datagrundlag - endelig").UsedRange.Rows.Count
Dim r, s As Long
For r = 2 To OprydningsAntal
Find = Worksheets("Oprydning").Cells(r, 1).Value
For s = 2 To DataAntal
If Worksheets("Datagrundlag - endelig").Cells(s, 3).Value = Find Then
Worksheets("Datagrundlag - endelig").Cells(s, 3).EntireRow.Delete
Exit For
End If
Next s
Next r
Worksheets("Datagrundlag - endelig").Visible = False
ActiveWorkbook.RefreshAll
End Sub
但这需要很长时间,因为不相关员工的列表目前有 460 个不同的值(并且会变得更大)。还有另一种方法可以做到这一点吗?我对 VBA 很陌生,但是可以使用数组吗?启动代码的“命令按钮”是否会使其变慢?
提前致谢!
海蒂
【问题讨论】:
-
从您当前的非相关人员列表中创建一个数组,并将其用于使用 xlFilterValues 进行自动过滤。删除可见行并移除过滤器。
标签: excel vba for-loop search delete-row