Jump to content
hugoribeiro

Maior valor de um conjunto de dados

Recommended Posts

hugoribeiro

Boa noite.

Alguém me pode ajudar com um pequeno problema em VBA?

Tenho uma tabela com duas colunas:

ano km

1 2

1 2

1 3

2 3

2 3

2 4

Como devo fazer para obter o maior valor para cada um dos anos?

Obrigado.

Share this post


Link to post
Share on other sites
joseA

Seja bem vindo, Hugo Ribeiro.

=MÁXIMO(SE(A2:A7=1;B2:B7))

Ctrl + Shift + Enter

e

=MÁXIMO(SE(A2:A7=2;B2:B7))

Ctrl + Shift + Enter

Share this post


Link to post
Share on other sites
hugoribeiro

Obrigado pelas boas vindas.

Na verdade o que eu quero fazer é um código VBA que resolva um problema daquele género. A tabela apresentada é apenas exemplificativa. No caso do número de anos e kms aumentar significativamente, com o método apresentado não seria viável.

Admitindo que os valores dos anos se encontram na coluna A, e os dos kms na coluna B, suspeito que seja utilizando o ciclo Do While. Mas necessito de ajuda para o construir.

Obrigado pela ajuda.

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Tens aqui uma forma

Maior.xlsm


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
hugoribeiro

Obrigadíssimo!

Só tenho de o 'obrigar' a ordenar os valores antes de fazer a comparação linha a linha para que funcione.

E já consegui fazer isso.

Muito obrigado pela ajuda!

Share this post


Link to post
Share on other sites
hugoribeiro

Boa noite. Ainda sobre este tema, e tendo em conta o código da resposta, pergunto porque é que foi necessário um 2º ciclo if :

If celula.Offset(0, 1).Value >= Maior Then ' verifica se o valor da coluna 'km', é maior em relações aos valores anteriores
       Maior = celula.Offset(0, 1).Value ' se o valor for maior, guarda esse valor na variavel 'maior'
   End If

que é exactamente igual ao primeiro, corrido logo no início do ciclo for.

Obrigado.

Share this post


Link to post
Share on other sites
Andrepereira9

Boas.

Por acaso, tens razão.  ;)

Não preciso do  2º if para nada. Como ele só entra no 2º if, caso o valor do ano, seja diferente do anterior, ele não vai comparar com nada.

Nesse caso o codigo fica assim:

Sub Maior()

Dim celula As Range
Dim Maior As Double
Dim ultimovalor As String


Maior = "0"
ultimovalor = Range("A2").Value 'Associa o valor da 1º celula á variavel 'ultimovalor'

For Each celula In Range("A2:A17") ' percorre as colunas

If celula.Value = ultimovalor Then ' verifica se o valor da coluna 'ano', é igual ao da coluna anterior

   If celula.Offset(0, 1).Value > Maior Then ' verifica se o valor da coluna 'km', é maior em relações aos valores anteriores
        Maior = celula.Offset(0, 1).Value ' se o valor for maior, guarda esse valor na variavel 'maior'
    End If
    
ultimovalor = celula.Value ' guarda o valor da coluna 'ano.

Else ' se o valor da coluna 'ano' alterar

celula.Offset(-1, 3).Value = Maior 'escreve na coluna 'Maior Valor', o valor maior encontrado nas colunas anteriores
ultimovalor = celula.Value ' guarda o valor da coluna 'ano
Maior = celula.Offset(0, 1).Value ' se o valor for maior, guarda esse valor na variavel 'maior'

End If

If celula.Offset(1, 0).Value = 0 Then ' verifica se a celula de baixo, tem algum valor. se não tiver nenhum valor, escreve o valor mais alto, encontrado até essa coluna.
   celula.Offset(0, 3).Value = Maior ' escreve o valor mais alto
End If

Next ' avança para a proxima coluna


End Sub


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

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

×
×
  • Create New...

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.