excel vba比较细胞

时间:2013-10-08 14:35:17

标签: excel vba excel-vba

我已经尝试过很多方法,但却无法得到我需要的东西。

我有一张包含这些数据的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工作表的末尾。

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

    示例:前三行是相同的,前两行加上它然后*加3%,如果最后一行相等,则删除最后一行。

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

1 个答案:

答案 0 :(得分: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

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

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