操作Excel电子表格,根据列中的值移除行,然后根据另一列中的值移除更多的行

我有一个相当复杂的问题。

我有一个日志文件,当放入Excel的列“我”包含事件ID,列J包含一个自定义的键,保持一个特定的偶数分组。

我想要做的是删除任何不包含说102的值在事件id列中的行。 然后我需要检查自定义键(J列),并删除重复的行,因为任何重复将错误地显示我想要的其他统计。

我已经得到了尽可能从列中使用COM对象和.entirecolumn单元格值检索值,但我完全难倒我如何拼凑一个坚实的方式来删除行。 我无法弄清楚如何获得每个值的行。

为了更清楚一点,这是我想要做什么的思考过程:

如果列I中的单元格值不= 102,则删除单元格所在的行。 重复电子表格中的所有行。 然后 – 读取J列中的每个单元格,并根据列J中的值删除包含重复项的所有行。保存电子表格。

任何一个人能帮助我吗?



附加信息:

列I保存一个string,它是一个事件ID号eg = 1029列J保存一个string,它是数字和字母的混合= 1ASER0X3NEX0S

Ellz,我同意Macro Man的观点,因为你的标签是误导性的,更重要的是,我确实需要知道Column J的细节。

不过,我今天对于粗鲁的post感到厌恶,你的礼貌和尊重,所以我已经粘贴了一些代码,这将做的伎俩……提供J栏可以是一个string(你没有给我们的细节…看看macros人的目标是什么?)。

有很多方法来testing重复。 一个是尝试添加一个唯一的键到一个集合,看看是否会抛出一个错误。 许多人不会喜欢这种哲学,但是对你来说似乎是可以的,因为它也给了你J列J中所有独特(即剩下的)键的集合。

Sub Delete102sAndDuplicates() Dim ws As Worksheet Dim uniques As Collection Dim rng As Range Dim rowPair As Range Dim iCell As Range Dim jCell As Range Dim delRows As Range Set ws = ThisWorkbook.Worksheets("Sheet1") Set rng = Intersect(ws.UsedRange, ws.Range("I:J")) Set uniques = New Collection For Each rowPair In rng.Rows Set iCell = rowPair.Cells(, 1) Set jCell = rowPair.Cells(, 2) On Error Resume Next uniques.Add jCell.Value2, jCell.Text If Err = 457 Or iCell.Value2 = 102 Then On Error GoTo 0 If delRows Is Nothing Then Set delRows = rowPair.EntireRow Else Set delRows = Union(delRows, rowPair.EntireRow) End If End If Next If Not delRows is Nothing then MsgBox delRows.Address(False, False) & " deleted." delRows.Delete End If End Sub 

有很多方法可以完成这个任务,哪一个最好取决于你执行这个任务的频率以及你是否希望完全自动化。 既然你用VBA标记了你的问题,我想你会对基于VBA的答案感到满意:

 Sub removeValues() Range("I1").Select 'Start at the top of the I column 'We are going to go down the column until we hit an empty row Do Until IsEmpty(ActiveCell.Value) = True If ActiveCell.Value <> 102 Then ActiveCell.EntireRow.Delete 'Then delete the row Else ActiveCell.Offset(1).Select 'Select the cell below End If Loop 'Now we have removed all non-102 values from the column, let`s remove the duplicates from the J column Range("A:J").RemoveDuplicates Columns:=10, Header:=xlNo End Sub 

关键的一行是Range("A:J").RemoveDuplicates 。 它将根据您在指定的列中find的重复项从您指定的范围中删除行。 在这种情况下,它将根据第10列中的重复项(即J)从AJ列中移除项目。 如果您的数据超出了J列,那么您需要将"A:J"replace为适当的范围。 请注意, Columns值是相对于第一列的索引,所以当J列在A(1)开始时为10时,例如如果范围仅为I:J则为2 。 那有意义吗?

(注意:使用ActiveCell并不是最好的做法,但最明显的方法就是你要做的事情,因为看起来你是VBA的新手,我认为这将是最容易理解的)。