[英]Excel macro to delete all rows on all worksheets if the value in column AA = 0
[英]Creating an Excel Macro to delete rows if a column value repeats consecutively less than 3 times
我擁有的數據可以簡化為: http : //i.imgur.com/mn5GgrQ.png
在此示例中,我想刪除與磁道2相關的數據,因為它只有3個與之相關的幀。 具有3個以上關聯幀的所有數據都可以保留。
正如我試圖演示的那樣,幀號並不總是從1開始。 對於所跟蹤的幀數,跟蹤號將始終連續為同一編號。 我正在考慮使用一個函數為A列中的每個連續值將1附加到變量中,然后執行測試以查看該值是否等於> =3。如果是,則轉到A中的下一個整數,如果沒有,然后刪除所有標有該整數(在這種情況下為2)的行。
在Excel宏中使用Visual Basic可以做到這一點,並且有人可以給我一些我可以使用的功能的入門提示嗎? 在這里完成新手。 我沒有為VBA找到任何類似的東西, 只有R。
我假設您通過閱讀來理解代碼。
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開始的數組)。 它會建立一個這樣的單元格的地址字符串,並立即將其全部刪除。
注意:
A2:A15
為例。 請根據您的單元格范圍對其進行修改。 DeleteRowsWhereTrackLTE3
刪除此類行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.