我假设您通过阅读来理解代码。
Option Explicit
Public Function GetCountOfRowsForEachTrack(ByVal sourceColumn As Range) As _
Scripting.Dictionary
Dim cell As Range
Dim trackValue As String
Dim groupedData As Scripting.Dictionary
Set groupedData = New Scripting.Dictionary
For Each cell In sourceColumn
trackValue = cell.Value
If groupedData.Exists(trackValue) Then
groupedData(trackValue) = cell.Address(False, False) + "," + groupedData(trackValue)
Else
groupedData(trackValue) = cell.Address(False, False)
End If
Next
Set GetCountOfRowsForEachTrack = groupedData
End Function
Public Sub DeleteRowsWhereTrackLTE3()
Dim groupedData As Scripting.Dictionary
Set groupedData = GetCountOfRowsForEachTrack(Range("A2:A15"))
Dim cellsToBeDeleted As String
Dim item
For Each item In groupedData.Items
If UBound(Split(item, ",")) <= 2 Then
cellsToBeDeleted = item + IIf(cellsToBeDeleted <> "", "," + cellsToBeDeleted, "")
End If
Next
Range(cellsToBeDeleted).EntireRow.Delete
End Sub
GetCountOfRowsForEachTrack
是一个返回字典的函数(它将轨道号存储为键,与该轨道关联的单元格地址作为字符串)
DeleteRowsWhereTrackLTE3
是GetCountOfRowsForEachTrack
用于获取轨道编号和与其关联的单元格的聚合信息的过程。此方法循环遍历字典并检查与 track 关联的单元格的数量是否为<=2
(因为拆分字符串返回从 0 开始的数组)。它构建这些单元格的地址字符串,并在最后一次将其全部删除。
笔记:
- 在基本模块(或您拥有数据的特定工作表)中添加以下代码。
- 添加对“Microsoft Scripting.Runtime”库的引用。在 VBA 中,单击“工具”->“参考”菜单。勾选“Microsoft Scripting.Runtime”并单击“确定”。
- 我曾用过
A2:A15
这个例子。请根据您的单元格范围对其进行修改。
- 假设您没有要删除的数千个单元格,在这种情况下,该方法可能会失败。
- 调用以
DeleteRowsWhereTrackLTE3
删除此类行。