我想总结基于“A-O”列中找到重复的值。我正在使用下面的宏。有大约500k +记录,下面的宏挂起不好。Excel宏VBA总结重复值,然后删除重复的记录
Sub Formulae(TargetCol1, TargetCol2, ConcatCol, Col1, Col2, StartRow, EndRow, Sheet)
Sheets(Sheet).Range(TargetCol1 & CStr(StartRow)).Formula = "=SUMIF($" & ConcatCol & "$" & CStr(StartRow) & ":$" & ConcatCol & "$" & CStr(EndRow) & "," & ConcatCol & CStr(StartRow) & ",$" & Col1 & "$" & CStr(StartRow) & ":$" & Col1 & "$" & CStr(EndRow) & ")"
Sheets(Sheet).Range(TargetCol1 & CStr(StartRow)).Select
Selection.Copy
Sheets(Sheet).Range(TargetCol1 & CStr(EndRow)).Select
Range(Selection, Selection.End(xlUp)).Select
Application.CutCopyMode = False
Selection.FillDown
Call PasteSpecial(TargetCol1, "T", StartRow, EndRow)
Sheets(Sheet).Range(TargetCol2 & CStr(StartRow)).Formula = "=SUMIF($" & ConcatCol & "$" & CStr(StartRow) & ":$" & ConcatCol & "$" & CStr(EndRow) & "," & ConcatCol & CStr(StartRow) & ",$" & Col2 & "$" & CStr(StartRow) & ":$" & Col2 & "$" & CStr(EndRow) & ")"
Sheets(Sheet).Range(TargetCol2 & CStr(StartRow)).Select
Selection.Copy
Sheets(Sheet).Range(TargetCol2 & CStr(EndRow)).Select
Range(Selection, Selection.End(xlUp)).Select
Application.CutCopyMode = False
Selection.FillDown
Call PasteSpecial(TargetCol2, "U", StartRow, EndRow)
End Sub
Sub PasteSpecial(Col1, Col2, StartRow, EndRow)
Range(Col1 & CStr(StartRow)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range(Col2 & CStr(StartRow)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
让我来简单解释宏。我有专栏“A-O”,我必须将他们分组... ...根据分组我必须总结列“P,Q”。我有一个函数可以在16列中生成一个连接字符串并存储在“AA”列中。基于此列我使用SUMIF函数来汇总所有重复值
=SUMIF($AA$2:$AA$500000,$AA2,$P$2:$P$500000)
=SUMIF($AA$2:$AA$500000,$AA2,$Q$2:$Q$500000)
然后我复制粘贴特殊作为“价值”的上述值,以除去所述式中,在2周新的cols(在上面的宏代码PasteSpecial的功能) 。
最后我所说的删除重复删除
我已经使用了.removeduplicates方法,这似乎相当快,即使在这样一个庞大的数据集的工作重复值。在Excel中是否有任何预定义的函数,它甚至会将重复项的值相加,然后删除重复项?
Sub Remove_Duplicates_In_A_Range(StartRow, EndRow, Sheet, StartCol, EndCol, level)
Sheets(Sheet).Range(StartCol & CStr(StartRow) & ":" & EndCol & CStr(EndRow)).RemoveDuplicates Columns:=20, Header:=xlNo
End Sub
上述逻辑挂起不良的饮食所有CPU的资源和崩溃严重...
有人请优化上面的宏,使其与500K +的记录工作。最多1-2分钟的表现是可以接受的。
请帮忙!!!
编辑:通过500k +记录我的意思是A1:O500000。我应该以这种方式检查A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1与A2,B2,C2,D2, E2,F2,G2,H2,I2,J2,K2,L2,M2,N2,O2和A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3,M3,N3, O3等....直到A500000,B500000等...。
总之我应该检查整个A1-O1集与整个A2-O2或A3-O3或..... A500k-O500k等
对于整个AO之间的每场比赛都匹配记录集我需要总结他们各自的P,Q列。比如说A1-O1设置与A2-O2设置匹配,然后加P1,Q1和P2,Q2并存储到P1,Q1或者其他东西中。
无论哪种情况,我需要保留每个原始记录集say,A1 -O1总结了它的重复值和它自己在P1中的值,Q1
我不认为我们现在可以在这里附上Excel表的演示,我们可以吗? :(
EDIT2:。
功能的所有细胞中复制SUMIF公式
Sub PreNettingBenefits(StartRow1, EndRow1, StartRow2, EndRow2, Col_Asset, Col_Liab, Src_Col_Asset, Src_Col_Liab, ConcatCol, Src_ConcatCol, level, Sheet2, Sheet1)
'=SUMIF(Sheet1!$AA$2:$AA$81336,Sheet2!AA2,Sheet1!$P$2:$P$81336)
Application.Calculation = xlCalculationAutomatic
Sheets(Sheet2).Range(Col_Asset & CStr(StartRow2)).Formula = "=SUMIF(" & Sheet1 & "!$" & Src_ConcatCol & "$" & CStr(StartRow1) & ":$" & Src_ConcatCol & "$" & CStr(EndRow1) & "," & Sheet2 & "!" & ConcatCol & CStr(StartRow2) & "," & Sheet1 & "!$" & Src_Col_Asset & "$" & CStr(StartRow1) & ":$" & Src_Col_Asset & "$" & CStr(EndRow1) & ")"
Sheets(Sheet2).Range(Col_Asset & CStr(StartRow2)).Select
Selection.Copy
MsgBox Sheets(Sheet2).Range(Col_Asset & CStr(EndRow2)).Address
Sheets(Sheet2).Range(Col_Asset & CStr(EndRow2)).Select
Range(Col_Asset & CStr(StartRow2) & ":" & Col_Asset & CStr(EndRow2)).Select
Application.CutCopyMode = False
Selection.FillDown
Sheets(Sheet2).Range(Col_Liab & CStr(StartRow2)).Formula = "=SUMIF(" & Sheet1 & "!$" & Src_ConcatCol & "$" & CStr(StartRow1) & ":$" & Src_ConcatCol & "$" & CStr(EndRow1) & "," & Sheet2 & "!" & ConcatCol & CStr(StartRow2) & "," & Sheet1 & "!$" & Src_Col_Liab & "$" & CStr(StartRow1) & ":$" & Src_Col_Liab & "$" & CStr(EndRow1) & ")"
Sheets(Sheet2).Range(Col_Liab & CStr(StartRow2)).Select
Selection.Copy
MsgBox Sheets(Sheet2).Range(Col_Liab & CStr(EndRow2)).Address
Sheets(Sheet2).Range(Col_Liab & CStr(EndRow2)).Select
Range(Col_Liab & CStr(StartRow2) & ":" & Col_Liab & CStr(EndRow2)).Select
Application.CutCopyMode = False
Selection.FillDown
Application.Calculation = xlCalculationManual
End Sub
它挂很糟糕Whts问题在复制跨30K-40K行的公式可能有人请优化代码?
我对这个分组有点困惑。你只是想把A-O行中的所有单元格总和(每次出现在第一个单元之后)? – aevanko
是的,我同意没有更清晰......我编辑了我的主要问题。我想现在应该更清楚了。 –
请记得在代码开始处放置“application.screenupdating = false”关闭屏幕更新,然后在最后将其重新设置为true。这应该有助于加快事情的速度。 – aevanko