我假設你通過閱讀它來理解代碼。
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
刪除此類行。