我假设你通过阅读它来理解代码。
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
获得磁道号码中的聚合信息的程序的功能和与之相关的细胞。此方法遍历字典并检查与轨道关联的单元格的数量是否为<=2
(因为拆分字符串会返回从0开始的数组)。它建立一个这样的单元格的地址串,并在最后一次删除它。
注:
- 添加BAS模块在下面的代码(或一个特定的片,其中 你有数据)。
- 添加对“Microsoft Scripting.Runtime”库的引用。在VBA里面,点击“工具” - >“参考”菜单。选中“Microsoft Scripting.Runtime”并单击确定。
- 我以
A2:A15
为例。请根据您的小区范围进行修改。
- 假设是您没有数千个要删除的单元格,在这种情况下该方法可能会失败。
- 致电
DeleteRowsWhereTrackLTE3
删除此类行。