![Somando valores de várias planilhas (VBA)](https://rvso.com/image/1414693/Somando%20valores%20de%20v%C3%A1rias%20planilhas%20(VBA).png)
Na minha pasta de trabalho do Excel, tenho três planilhas separadas. As planilhas têm formato idêntico e representam valores de contagem para diferentes categorias (automóveis de passeio, caminhões, etc.). Preciso combinar as planilhas da seguinte forma e criar uma nova pasta de trabalho com os dados combinados (CombinedCount.xlsx):
='Passageiro'!B3+'Caminhão Pesado'!B3+'Caminhão Leve'!B3
Há muitas células para somar e esse código será aplicado a um grande número de pastas de trabalho exatamente com o mesmo formato. Existe uma maneira de automatizar esse processo com algum código Python?
Responder1
Existe algum motivo específico pelo qual você deseja fazer isso com Python? O Excel pode fazer a maior parte disso sozinho, com esta macro VBA:
Sub CombineSheets()
'
' Add three identically-formatted sheets,
' putting the result into a fourth one, and then moving it to a new workbook.
'
Sheets(1).Copy After:=Sheets(3)
Sheets(4).Name = "Combined Counts"
Sheets(2).Select
Cells.Copy
Sheets(4).Select
Range("A1").Select
Selection.PasteSpecial Operation:=xlAdd
Sheets(3).Select
Cells.Copy
Sheets(4).Select
Selection.PasteSpecial Operation:=xlAdd
Sheets(4).Move
End Sub
Esse
- Faz uma cópia completa da primeira folha, colocando-a após a terceira folha. A nova planilha pode ser posteriormente referenciada como
Sheets(4)
. Se a primeira planilha for chamadaPassenger
, a nova planilha será inicialmente chamadaPassenger (2)
. - Renomeie a nova planilha
Combined Counts
. - Copie toda a segunda folha e cole-a na nova folha usando adição. (Esta é a função que você pode acessar interativamente com “Colar” → “Colar especial…” e selecionando “Adicionar” na seção “Operação”.) E repita com a terceira folha. Os dados não numéricos (ou seja, texto) na segunda e terceira planilhas são ignorados. Se a primeira planilha contiver texto em uma determinada célula, esse texto persistirá no resultado, mesmo que uma das outras planilhas contenha um número. (Mas isso não deve ser um problema, já que você diz que as folhas têm formato idêntico.)
- Separe a nova planilha do livro, criando uma nova pasta de trabalho.
Você pode então salvar a nova pasta de trabalho e fechar sua janela colocando algo como
Do
fName = Application.GetSaveAsFilename( _
FileFilter:="Excel Workbook (*.xlsx), *.xlsx")
Loop Until fName <> False
ActiveWorkbook.SaveAs Filename:=fName
ActiveWindow.Close
antes de o End Sub
. Ou você poderia obter o nome do arquivo de alguma outra maneira.
Responder2
Eu usaria o suplemento Power Query para esta tarefa. Ele pode importar todos os arquivos ou arquivos selecionados de uma pasta e construir uma tabela combinando os dados de cada arquivo (assumindo que eles tenham um layout padrão conforme você indicou). Por exemplo:
http://www.excelguru.ca/blog/2013/11/26/from-txt-files-to-bi-solution/
O Power Query também possui uma função Group By que pode resumir dados e agregá-los, por exemplo, Contagem, Contagem Distinta, Soma, Média etc.