Somando valores de várias planilhas (VBA)

Somando valores de várias planilhas (VBA)

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 chamada Passenger, a nova planilha será inicialmente chamada Passenger (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.

informação relacionada