Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Somatório entre abas VBA

Bom dia, Estou com uma duvida, eu tenho uma planilha gerencial no meu trabalho aonde a sheet(1) é um somatório das outras sheets, ou seja: o A1 da sheet(1) é igual ao somatório de todas as A1 das sheets(x). Com isso em mente eu quero criar algum tipo de função no VBA para, INDEPENDENTE do numero de worksheets que tenha na planilha ele faça esse somatório. Estou querendo criar uma Function que seja a soma de todas as A1 das planilhas.

1 resposta
solução!

Olá Gustavo, tudo bem? Espero que sim!

Desculpe pela demora em retornar.

Você pode utilizar o caractere '*' como um caractere curinga para representar todas as outras abas da pasta de trabalho ao mesmo tempo. Sabendo disso, você pode utilizar a fórmula =SOMA('*'!A1), dessa forma o Excel vai transformar o '*' na referência de todas as planilhas com exceção da planilha que se encontra.

Supondo que exista na pasta de trabalho 5 Planilhas, nomeadas de Planilha1 até Planilha5. Ao escrever a fórmula =SOMA('*'!A1) em alguma célula da Planilha1, o Excel transformará a fórmula para SOMA('Planilha2:Planilha5'!A1), realizando então a soma de todas as células A1's das outras abas.

Função de soma das células A1 de todas as planilhas de uma pasta de trabalho do Excel

Só possui um pequeno problema, ao criar uma nova aba, essa fórmula não capta a informação da nova aba, uma vez que está fazendo referência somente às abas já existentes. Então se necessitar de criar novas abas, somente com essa solução não é suficiente.

Uma forma de contornar esse problema é criando um Evento no momento em que é criada uma nova aba, podemos fazer isso utilizando o VBA. Esse evento será responsável por atualizar a fórmula assim que criamos uma nova aba na pasta de trabalho.

Para criarmos esse evento, primeiramente precisamos abrir o Visual Basic, pressionando o atalho Alt + F11, ou abrindo através da aba de desenvolvedor.

Selecione EstaPastaDeTrabalho na seção de VBAProject ( 1 ) e selecione a opção Workbook na seção de scripts do VBA ( 2 ). Feito isso, selecione o evento NewSheet na seção de eventos do VBA. Será criada uma Sub no editor de script, que será executado sempre que uma nova aba for criada na pasta de trabalho do Excel.

Seleção de Workbook no VBAProject

Seleção do evento NewSheet na seção de eventos do VBA

O script que será utilizado para esse evento é o seguinte:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

aba_criada = ActiveSheet.Name

Worksheets("Planilha1").Activate
Range("A1").Formula = "=SUM('*'!A1)"
Sheets(aba_criada).Select
End Sub

Primeiro será armazenada a informação da nova aba que será criada na variável aba_criada. Selecionaremos a "Planilha1" que é o nome da planilha onde será colocada a função e colocaremos na célula A1, através de Range("A1").Formula = "=SUM('*'!A1)". Você pode alterar Planilha1 e A1 para o nome que desejar e a célula de interesse. Ao final da macro, a planilha que foi criada será selecionada para que não atrapalhe o fluxo de trabalho.

A seguir você pode conferir o funcionamento da função e pode ver que funciona automaticamente quando uma nova aba é criada, pois o evento é executado e atualiza a função sem atrapalhar o fluxo de trabalho.

Função de soma em todas as planilhas do Excel com evento que atualiza a função sempre que uma nova aba é criada

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!