-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. 一致する select(Row)

  3. 一致の最後の行を削除します

  4. Excelシートの最後までループします。

より正確には、列 B の各行を計算し、選択範囲の最後の行と比較する必要があります。

例:最初の 3 行は同じです。最初の 2 行を合計してから * 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 に答える