Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

joseA

[Resolvido] Soma Condicional

Recommended Posts

jpaulino

Olá,

E é preciso ser feito em VBA ? Não podes utilizar fórmulas ?

Se colocares em B3 (e copiares para a direita)

=SUMIF(Folha1!$B$2:$B$18;Folha2!B$2;Folha1!$H$2:$H$18)

Depois, nas outras linhas só tens de aumentar a ultima condição de H para I, I para J, etc. Ou seja em B4 ficava

=SUMIF(Folha1!$B$2:$B$18;Folha2!B$2;Folha1!$I$2:$I$18)

depois:

=SUMIF(Folha1!$B$2:$B$18;Folha2!B$2;Folha1!$J$2:$J$18)

=SUMIF(Folha1!$B$2:$B$18;Folha2!B$2;Folha1!$K$2:$K$18)

...

Share this post


Link to post
Share on other sites
jtiagodias

Estou com o Paulino.

Ele não precisa de apoio porque sabe muito bem o que diz mas... Basta apenas fazer o soma.se(...).

Share this post


Link to post
Share on other sites
joseA

Antes de tudo, obrigado pela atenção.

Olha, preciso de apoio sim. É que o ficheiro original tem bastante dados, este anexado é apenas um esboço. O original fica bastante lento com excesso de fórmulas. Agora se não tiver como orientar-me em VBA, tudo bem, agradeço.

Abraços a todos,

Share this post


Link to post
Share on other sites
jpaulino

Mas através de VBA querias como ... um botão para actualizar ou quando alteravas uma célula ?

Share this post


Link to post
Share on other sites
joseA

Paulino,

Delculpe-me pela indecisão, mas estive a analizar e conluí que seria melhor um botão para actualizar.

Share this post


Link to post
Share on other sites
jpaulino

Vê este exemplo:

Sub ActualizaValores()
Dim x As Long
Dim m As Byte
Dim wsRelat As Worksheet, wsDados As Worksheet
Dim profissional As String, mes As String

Dim rg As Range
Dim result As Long

Set wsRelat = Worksheets("Folha2")
Set wsDados = Worksheets("Folha1")

Application.ScreenUpdating = False

' Ciclo na tabela de resultados
For x = 3 To wsRelat.Cells(wsRelat.Cells.Rows.Count, 2).End(xlUp).Row - 1

' Verifica qual o nome a pesquisar
profissional = wsRelat.Cells(x, 1).Value

Set rg = wsDados.Cells.Find(profissional)

' Ciclo nos meses
For m = 2 To 13

	' Caso não tenha encontrado o nome coloca tudo a zero
	If rg Is Nothing Then
		Cells(x, m).Value = 0
	Else

		' Calcula o valor e mostra-o na respectiva célula
		mes = Cells(2, m).Value
		result = Application.WorksheetFunction.SumIf(wsDados.Columns(2), mes, wsDados.Columns(rg.Column))
		Cells(x, m).Value = result

	End If
Next
Next

Application.ScreenUpdating = True

End Sub

Ficheiro para Download

Share this post


Link to post
Share on other sites
joseA

Boa noite Jorge Paulino,

Mas uma vez muito obrigado, pela atenção dispensada.

Quase perfeito, falta apenas um detalhe. Quando deleto a última linha "Total Geral" da Folha2 a actualização não é realizada, tem como corrigir para que funcione independente desta linha 13 esteja em branco? Se tiver ficarei muito grato.

Abraços a todos!

Share this post


Link to post
Share on other sites
jpaulino

A ultima linha é para ficar com formula, uma vez que não é necessária automação ... acho desnecessário!

O que achas ?

Share this post


Link to post
Share on other sites
joseA

Minha idéia seria que, assim como a última linha e coluna também seriam preenchidas automáticas. Ficaria perfeito.

Share this post


Link to post
Share on other sites
jpaulino

Bem, realmente não vejo necessidade nenhuma, embora faltasse a fórmula no ficheiro, mas aqui vai ... podes colocar no final da função:

Dim lastRow As Long
lastRow = wsRelat.Cells(wsRelat.Cells.Rows.Count, 1).End(xlUp).Row

' Preenche a linha de totais
For m = 2 To 13
     wsRelat.Cells(lastRow, m).FormulaR1C1 = "=SUM(R[-" & lastRow - 3 & "]C:R[-1]C)"
Next

' Preenche a coluna de totais
For x = 3 To lastRow
    wsRelat.Cells(x, 14).FormulaR1C1 = "=SUM(RC[-12]:RC[-1])"
Next x

Altera também esta linha:

For x = 3 To wsRelat.Cells(wsRelat.Cells.Rows.Count, 2).End(xlUp).Row - 1

Para:

For x = 3 To wsRelat.Cells(wsRelat.Cells.Rows.Count, 1).End(xlUp).Row - 1

Share this post


Link to post
Share on other sites
joseA

Jorge Paulino e demais amigos,

Problema solucionado. Para vc's terem uma idéia, posto o ficheiro com a rotina que estava a usar com um contador (35 segundos para rodar), enquanto que a elaborada pelo Paulino é instantânea. Este ficheiro tem vários relatórios verifique as minhas rotinas - verdadeiros "mostros" - folha2 e folha3, apenas dois exemplos. Se tiver como simplificar esta da folha3, ficarei grato.

http://www.4shared.com/file/89886122/333523fa/A_PROGRAMAR_TREINO_II.html

:cheesygrin:

Abraços a todos!

Share this post


Link to post
Share on other sites
joseA

Olha realmente,

Fiz alguns testes e algumas adaptações para meu ficheiro original e ficou perfeito. Fico muito agradecido ao Jorge Paulino e aos demais amigos pela atenção dispensada. ;D

:bye2:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.