简单的VBA脚本,用于标记遵循某种模式的$ 4000美元以上的交易

时间:2019-02-11 19:58:23

标签: excel vba

我正在尝试编写一个简单的脚本,该脚本比较并标记相似的事务(行)并将其粘贴到工作表的底部。要标记的交易应满足以下条件。

交易中的金额大于4000或小于-4000(第11列) 被比较的两个事务具有相同的部件号(第3列) 美元金额相似(彼此之间90-110%之间)且数字符号相反的两项交易

Sub checktrans()

Dim newLastRow, rowcount As Long
Dim row, row2, amountcol, partnumcolcol As Integer

amountcol = 16
partnumcol = 3
rowcount = 27307
newLastRow = 37309

For row = 1 To rowcount

    For row2 = 1 To rowcount

      If Cells(row, amountcol) > 4000 Or Cells(row, amountcol) < -4000 Then

        If row <> row2 Then

           If Cells(row, partnumcol) = Cells(row2, partnumcol) Then

                If Abs(Cells(row, amountcol)) > 0.9 * Abs(Cells(row2, amountcol)) And Abs(Cells(row, amountcol)) < 1.1 * Abs(Cells(row2, amountcol)) Then

                 If (Cells(row, amountcol) < 0 And Cells(row2, amountcol) > 0) Or (Cells(row, amountcol) > 0 And Cells(row2, amountcol) < 0) Then

                   ActiveSheet.Rows(row).Copy
                    ActiveSheet.Rows(newLastRow).PasteSpecial xlPasteAll
                    newLastRow = newLastRow + 1

                    ActiveSheet.Rows(row2).Copy
                    ActiveSheet.Rows(newLastRow).PasteSpecial xlPasteAll
                    newLastRow = newLastRow + 1

                 End If
                End If

           End If

        End If
     End If
    Next row2

Next row

End Sub

我写了上面的代码,看来行数很少(低于500),但是当行数超过27000时,它将陷入永无止境的循环,不断将新行粘贴到工作表上。它还将每对交易发布两次,我知道这也是我必须解决的逻辑缺陷。

P.S在这方面,我是个超级菜鸟,之前没有编程,而且我现在正在学习,以使我的生活更轻松。

1 个答案:

答案 0 :(得分:0)

您可以做的第一件事是从当前第一个循环的位置开始第二个循环。像{ "printerName": "test" } { "PrinterModel":"xerox" ,"printerName": "test" } { "PrinterMale":"xerox" } 。您已经检查了以前的记录。这样也可以解决重复项的问题,您可以删除For row2 = row + 1 to rowcount

第二,在宏的开头使用If row <> row2,在结尾使用Application.ScreenUpdating = False。这会在您的宏运行时关闭屏幕更新,并且可以极大地提高性能。

最后,您可以使用Application.ScreenUpdating = True将所有If合并为一个,但是我不知道这样做是否可以提高性能。