我正在尝试编写一个简单的脚本,该脚本比较并标记相似的事务(行)并将其粘贴到工作表的底部。要标记的交易应满足以下条件。
交易中的金额大于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在这方面,我是个超级菜鸟,之前没有编程,而且我现在正在学习,以使我的生活更轻松。
答案 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
合并为一个,但是我不知道这样做是否可以提高性能。