-2

我已经尝试和测试了很多方法,但从未能够得到我需要的东西。

我有一个包含这些数据的 Excel 表:(这是一个摘要,我有超过 150 000 行)

A          B      C

30170   38,08    553299
30170   -12      553299
30170   -0,8     553299
30172   38,08    553299
30172   -12      553299
30172   -0,8     553299
30173   19,04    553299
30173   -6       553299
30173   -0,4     553299
30174   19,04    553299
30174   -6       553299
30174   -0,4     553299
90221   197,29   553299
90221   -5,92    553299

我需要做什么:

  1. 测试 A 列和 C 列中的每个单元格

  2. 有匹配的选择(行)

  3. 删除匹配的最后一行

  4. 循环到excel表的末尾。

更准确地说,我需要计算 B 列中的每一行并与选择的最后一行进行比较。

例如:前三行相同,取前两行相加,然后*乘以 3%,如果最后一行相等,则删除最后一行。

不确定我是否足够清楚,如果您需要更多信息,请告诉我。

4

1 回答 1

0

这可能有效并跳过循环(等于更快的执行)

Sub Sample()

    Range("D2").FormulaR1C1 = _
        "=IF(RC[-3]&RC[-1] = R[1]C[-3]&R[1]C[-1],"""",IF(ABS(CEILING(SUMIFS(R[-1]C2:R2C2,R[-1]C1:R2C1,RC1,R[-1]C3:R2C3,RC3)*0.03,0.1))=ABS(RC[-2]),""Delete"",""""))"
    Range("D2").AutoFill Destination:=Range("D2:D15"), Type:=xlFillDefault
    Range("D1").AutoFilter Field:=4, Criteria1:="<>"
    Range("D2", Range("D" & Rows.Count)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Columns("D").Delete
    ActiveSheet.AutoFilterMode = False

End Sub

警告:还要在您的数据副本上测试代码,直到您 100% 确定它是正确的

注意:此答案假定您的数据上有标题,如果您不这样做,则需要添加更多行才能获得完整功能。

于 2013-10-08T15:17:21.643 回答