簡體   English   中英

如果列值連續重復少於3次,則創建Excel宏以刪除行

[英]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開始的數組)。 它會建立一個這樣的單元格的地址字符串,並立即將其全部刪除。

注意:

  1. 將以下代碼添加到bas模塊(或包含數據的特定工作表)中。
  2. 添加對“ Microsoft Scripting.Runtime”庫的引用。 在VBA中,單擊“工具”->“參考”菜單。 勾選“ Microsoft Scripting.Runtime”,然后單擊“確定”。
  3. 我以A2:A15為例。 請根據您的單元格范圍對其進行修改。
  4. 假定您沒有要刪除的數千個單元格,在這種情況下該方法可能會失敗。
  5. 調用DeleteRowsWhereTrackLTE3刪除此類行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM