Por que isso está trancando? Faça um loop por todas as linhas, execute a função em duplicado, exclua a linha duplicada
O código funciona quando eu corro algumas centenas de linhas por vez, mas sempre fica em algum lugar no meio quando tento executá-lo em 10.000.
O que o código faz: Procura entradas duplicadas na coluna A, adiciona os valores nas colunas c, d e e entre as duas linhas e exclui a linha original.
Alguém pode pensar em uma maneira mais estável de fazer isso, ou me indicar por que pode estar trancando?
Sub combineDelete ()
Const TEST_COLUMN As String = "A"
Dim i As Long
Dim iLastRow As Long
With ActiveSheet
iLastRow = .Cells(.Rows.Count, TEST_COLUMN).End(xlUp).Row
For i = iLastRow To 2 Step -1
If Cells(i, 1) = Cells(i - 1, 1) Then
s = Cells(i, 3).Value
t = Cells(i - 1, 3).Value
Cells(i - 1, 3) = s + t
u = Cells(i, 4).Value
v = Cells(i - 1, 4).Value
Cells(i - 1, 4) = u + v
w = Cells(i, 5).Value
y = Cells(i - 1, 5).Value
Cells(i - 1, 5) = w + y
Cells(i, 1).EntireRow.Delete
End If
Next i
End With
End Sub
Editar: aqui está um link para um subconjunto de amostra dos dados.
Pós-edição: todas essas idéias são eficazes. A solução de Ron Rosenberg abaixo consegue lidar com ordens de magnitude mais rapidamente do que qualquer solução com a qual eu tenha mexido. Obrigado!