我的数据可以简化为: http://i.imgur.com/mn5GgrQ.png
在这个例子中,我想删除与轨道2相关的数据,因为它只有3帧与之关联。所有包含3个以上相关帧的数据都可以保留。
帧编号并不总是从1开始,正如我试图演示的那样。对于跟踪的帧数,轨道号将始终是相同的数字。我正在考虑使用一个函数为A列中的每个连续值附加一个变量,然后执行测试以查看该值是否等于> = 3.如果是,则转到A中的下一个整数,如果不,然后删除标有该整数的所有行(在本例中为2)。
这是否可以在Excel宏中使用Visual Basic,并且任何人都可以给我一些关于我可以使用哪些功能的开始提示?在这里完成新手。我没有找到任何类似的VBA,only for R.
答案 0 :(得分:0)
我假设您通过阅读它来理解代码。
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
以删除此类行。