Segue uma cópia comentada do último código que passei. Após colar no módulo a fonte dos comentários assumirá a cor verde, o que irá facilitar a leitura.
Código: Selecionar todosSub MontaResumoV2()
Dim c As Long, LR As Long, ws As Worksheet 'declaração das variáveis
'desativa a atualização das ações na tela: evita o "flicking" e evita o aumento no tempo de execução
Application.ScreenUpdating = False
'se A2 da planilha Resumo estiver diferente de vazia, então limpa da linha 2 para baixo
If Sheets("Resumo").[A2] <> "" Then Sheets("Resumo").Range("A2:W" & Sheets("Resumo").Cells(Rows.Count, 1).End(3).Row) = ""
'faz o Loop pelas planilhas cujos nomes estiverem na matriz Array
For Each ws In Worksheets(Array("Loja1", "Loja2", "Loja3"))
'copia os dados de cada planilha cujo nome esteja na matriz e cola na primeira linha vazia da planilha Resumo
ws.Range("A2:W" & ws.Cells(Rows.Count, 1).End(3).Row).Copy Sheets("Resumo").Cells(Rows.Count, 1).End(3)(2)
Next ws
'ações na planilha Resumo
With Sheets("Resumo")
'LR á a variável que receberá o número da última linha com conteúdo na coluna A
LR = .Cells(Rows.Count, 1).End(xlUp).Row
'ordena os dados com base na coluna A, em ordem ascendente; esta ordenação é para forçar que os códigos _
duplicados fiquem em células adjacentes o que irá facilitar a operação seguinte
.Range("A2:W" & LR).Sort Key1:=.[A2], Order1:=xlAscending
'Loop pelas células da coluna A, para efetuar a soma dos dados dos códigos duplicados
For c = 3 To LR 'inicia o Loop na linha 3 e vai até a última linha com conteúdo (LR~~~>LastRow)
'início do Loop em A3, e se A3 for igual a A2 ...
If .Cells(c, 1) = .Cells(c - 1, 1) Then
'... então copia da linha 3 e cola na linha 2 com adição dos valores
.Cells(c, 3).Copy 'primeiro copia C3 e cola em C2, com adição ...
.Cells(c - 1, 3).PasteSpecial Paste:=xlValues, Operation:=xlAdd
'... em seguida repete a operação de H até V de uma só vez
.Cells(c, 8).Resize(, 15).Copy
.Cells(c - 1, 8).PasteSpecial Paste:=xlValues, Operation:=xlAdd
c = c + 1
End If
Next c
'feitas as adições, os registros com códigos duplicados são descartados _
(por padrão, entre os repetidos, o registro de baixo é descartado, por isso _
antes os valores foram adicionados ao registros de cima, que serão mantidos)
.Range("A2:W" & LR).RemoveDuplicates Columns:=1, Header:=xlNo
'por fim, os dados são reordenados, agora com base na coluna B
.Range("A2:W" & LR).Sort Key1:=.[B2], Order1:=xlAscending
End With
End Sub
#
dicas:
1. para saber mais sobre cada comando VBA utilizado em um código qualquer, no editor de VBA clique sobre o comando e aperte F1 para acessar a ajuda.
2. você pode acompanhar cada etapa da execução de um código, executando-o no modo depurar, via F8. Por exemplo, ative a planilha
Resumo, acesse o editor de VBA (Alt+F11), clique no ícone Maximizar no canto direito alto, ajuste o tamanho e posição da janela do VBA de modo que você consiga visualizar também a planilha em segundo plano, clique sobre qualquer parte do código e vá clicando em F8 e observe as alterações que o código irá fazendo na planilha a cada toque. Ainda, você pode saber o valor de cada variável ao pairar com o cursor do mouse sobre ela.
3. a diferença fundamental entre um código elaborado e um código gravado é que a construção do primeiro pode ser planejada, ao passo que o segundo se limita a gravar as operações efetuadas pelo usuário. Em um código gravado as referências a endereços de células são sempre absolutas, então na maioria dos casos são necessários ajustes para torná-lo dinâmico e também para eliminar os comandos
Select e
Activate.
4. segue um link sobre macros, veja se aproveita.
http://www.bertolo.pro.br/FinEst/Semana ... oExcel.pdf
Osvaldo
Quatro coisas que odeio: preguiçosos, políticos, Google planilhas e Outlook
Anexe arquivos diretamente no fórum:
+ Resposta / Adicionar um anexo / Selecione o arquivo
CÉLULAS MESCLADAS PODEM AFETAR FÓRMULAS E MACROS.