【发布时间】:2018-10-06 00:35:45
【问题描述】:
我有两个数据范围:
- Range1 是可用项目名称的列表
- Range2 是正在使用的项目名称列表
我正在尝试编写 VBA 代码来比较这两个范围,如果 Range1 中存在任何值,但 Range2 中不存在,那么我想从 Range1 中删除该值。
到目前为止,我有以下代码,但它目前删除 Range1 中的所有内容,无论项目名称是否在 Range2 中。
Public Sub CleanProjectLists()
Dim CellinProjectList As Range
Dim CellinCarArea As Range
Dim ProjectColumn As Long
Dim LastrowCarArea As Integer
Dim LastrowProjectList As Integer
Set CheckSheet = Sheets("Engine Ancillaries")
ProjectColumn = 8
LastrowProjectList = Sheets("VBA_Data").Cells(Rows.Count,
ProjectColumn).End(xlUp).Row
LastrowCarArea = CheckSheet.Cells(Rows.Count, 2).End(xlUp).Row
For Each CellinCarArea In CheckSheet.Range("B9:B" & LastrowCarArea)
For Each CellinProjectList In Sheets("VBA_Data").Range(Sheets("VBA_Data").Cells(2, ProjectColumn), Sheets("VBA_Data").Cells(LastrowProjectList, ProjectColumn))
If CellinCarArea.Value <> CellinProjectList.Value Then
Sheets("VBA_Data").Select
CellinProjectList.Offset(0, -1).Select
ActiveCell.Resize(, 4).ClearContents
Exit For
End If
Next CellinProjectList
Next CellinCarArea
结束子
如何做到这一点?
【问题讨论】:
-
范围 1 和范围 2 的值是否应按相同顺序排列?为简化起见,为什么不直接遍历 Range 1,尝试查找 Range 2 中的每个值,如果找不到则删除?
-
或者复制范围 1 上的所有范围 2 并使用删除重复项?
-
bigben - 不,它们的顺序不同,范围 2 会有重复。
-
由于它们的顺序不同,您的
CellinCarArea.Value <> CellinProjectList.Value方法 - 即逐个单元格顺序比较 - 将导致不必要的删除。
标签: vba excel foreach duplicates