Notifications
Clear all

O maior valor ou menor valor sem fórmula

9 Posts
3 Usuários
0 Reactions
3,212 Visualizações
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá, boa noite a todos!

Parece uma charada, mas não se trata disso. Gostaria de saber da possibilidade de contornar uma solução evidente para um problema e encontrar uma solução alternativa.

1. Para descobrir o maior ou e menor valor de uma lista usa-se;

=maior(A1:A10;1) ou =menor(A1:A10;1), sucessivamente altera-se o ultimo parâmetro para os valores seguintes.

2.Para descobrir o maior ou o menor valor de uma lista, desde que um critério externo seja atendido, teríamos;

=maior(se(B1:B10="Meninos";A1:A10);0))...

Neste ponto encontra-se a minha dúvida. A fórmula acima é do tipo matricial, e que, como será várias linhas a utilizaá-la, vai deixar a planilha muito lenta.

Existe uma forma de obter o maior ou menor valor de uma lista com uma condição sem utilizar esta fórmula ?

Desde já obrigado!

 
Postado : 04/05/2015 6:39 pm
(@edcronos)
Posts: 1006
Noble Member
 

sim é possivel em uma varredura

com vba usando
if, and, <, >, =

mas
talvez até com formula sem ser matricial
poderia se usar linhas ou colunas auxiliares para se ter uma formula mais simples e leve

vc falou que não era uma charada
mas para mim, sem saber como é a tabela e oq e oq exatamente vc quer fazer não deixa de ser uma charada
imagina dois montes de notas um metade da altura do outro
e se pergunta, qual monte tem maior valor, sendo que as notas não são iguais
e aí vc vai no monte maior?
e se for tudo de 2 reais e no da metade do tamanho for tudo de cem reais
não deixa de ser uma charada né

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 04/05/2015 7:10 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

(Risos)

É!
Depende do ângulo mesmo. Veja só, comecei descrevendo a forma usual de se obter determinado valor e encerro perguntando se existe outra forme de....obter o mesmo valor obtido, normalmente, pelas fórmulas descritas.

Mas aí, o que seria uma resposta, tornou-se a charada que mencionei não ser. E a tão esperada resposta veio na forma de "talvez", ou seja, ainda é uma impossibilidade, pois não foi respondida ainda.

Mas obrigado assim mesmo.

Um abraço.

 
Postado : 04/05/2015 7:33 pm
(@edcronos)
Posts: 1006
Noble Member
 

vc falou sem formula, não sei bem oq vc quer dizer com isso

em vba creio que teria que fazer um loop com os valores para se pegar o maior ou o menor ou entre eles

se poderia colocar os valores em um array, fazer um loop comparativo com os valores e os criterios e então ter o valor requerido
mas como falei, sem formula o ciclo vai ter teor escalonar de acordo com oq vc quer e com a tabela em questão

se poderia usar a propria formula do excel para se pegar apenas o valor e adicionar na planilha usando o vba

com uma planilha de exemplo "talvez ficasse mais facil entender oq vc quer"
mas ainda acho que sem formula somete com vba e ciclo comparativo

http://juliobattisti.com.br/artigos/off ... ess_p6.asp
http://www.portugal-a-programar.pt/topi ... rar-valor/

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 04/05/2015 7:57 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se é bem isto o que está procurando, então transcrevo uma solução dada pelo colega "Felipe Costa Gualberto - http://www.ambienteoffice.com.br " - Benzadeus, em :
"VBA - Recuperar o maior valor de uma matriz" - https://social.technet.microsoft.com/Fo ... m=officept, acredito ser o que está procurando :

Tenho uma coluna com N valores inteiros. Como faço em VBA pra recuperar o maior valor dessa coluna?
Se os valores estão na coluna A, tente:

Sub Maior()
    Dim r As Long
    Dim d As Double

    r = Cells(Rows.Count, "A").End(xlUp).Row
    d = WorksheetFunction.Max(Range("A1:A" & r))

    MsgBox "O maior valor da coluna A é: " & d

End Sub

Aproveitando o tópico e seu eu quiser encontrar o maior valor mas com um critério, por exemplo que na coluna B tenha a letra "A".
Resp :Eu usaria a própria fórmula do Excel para calcular o resultado e depois traduziria para VBA. Primeiro, escreveria em qualquer célula a fórmula desejada (com o gravador de macros ativado), que é:
=MÁXIMO(SE(B1:B5="B";A1:A5;"")) (fórmula matricial)

O gravador de macros ia retornar pra mim:
Selection.FormulaArray = "=MAX(IF(R[-2]C[-3]:R[2]C[-3]=""B"",R[-2]C[-4]:R[2]C[-4],""""))"

Alterando para a referência estilo A1, reescrevendo a fórmula:
"=MAX(IF(B1:B5=""B"",A1:A5,""""))"
Substituindo o '5' pelo último valor, aproveitando a macro anterior, temos:
"=MAX(IF(B1:B" & r & "=""B"",A1:A" & r & ",""""))"
A função que retorna o resultado de uma fórmula do Excel em tempo de execução do VBA se chama Evaluate(fórmula_excel). No nosso caso:
Evaluate("=MAX(IF(B1:B" & r & "=""B"",A1:A" & r & ",""""))")

A macro final é:

Sub Maior2()
    Dim r As Long
    Dim d As Double
    r = Cells(Rows.Count, "A").End(xlUp).Row
    d = Evaluate("=MAX(IF(B1:B" & r & "=""B"",A1:A" & r & ",""""))")
    MsgBox "O maior valor da coluna A em que na coluna B temos 'A' é: " & d
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/05/2015 5:56 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Eu sugiro que vc poste um modelo da sua tabela, devidamente compactada (se não tiver compactada eu vou excluir seu anexo), assim podemos testar diversas soluções direto no arquivo. Seria bom saber até qtas linhas vc quer que isso ocorra, ou seja, qual o tamanho dessa tabela...
Sim, matriciais em muitas linhas comprometem o desempenho, por isso eu sou a favor do uso de colunas adicionais, se vc não ver problemas nisso, vou estudar esse tipo de solução também. Uma alternativa seria usar o somarproduto com as condições... sei lá...

Digo, vc só sugeriu fazer isso sem fórmulas, pq a matricial é pesada, é isso, certo? Então a sua sugestão deveria ser, sem matriciais, ou uma forma de acelerar as matriciais, ao invés de pedir uma solução sem fórmula. Claro que sem fórmula é impossível. Daí a gente apela pro VBA. Que pode ou não ficar mais rápido. Eu consigo resolver isso em VBA pra vc e vai rodar em tempo recorde, prometo pra vc. Mas o uso do VBA vai forçar seu arquivo a ser XLSM, vai forçar o usuário a habilitar as macros, pode ser barrado em alguns servidores exchange, enfim, há vantagens e há desvantagens com uso de macros, por isso que eu sempre opto por tentar soluções com fórmulas primeiro.

FF

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/05/2015 7:19 am
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Ao

Edcronos

Obrigado pela dica. habitualmente quando falamos eM excel, usamos sempre a expressão "criar uma fórmula para encontrar tal valor" ou "criar uma fórmula para somar..."; Já quando falamos em VBA, dizemos "criar um código", "criar uma macro". Fazendo uma separação do modo como tratamos essas partes, em resumo temos 2 códigos ou duas instruções de códigos.

Minha expressão "sem fórmula" está diretamente ligada aos exemplos que dei das funções MAIOR e MENOR. Logo, eu quis dizer, criar uma macro ou um código que substituísse as fórmulas e o uso das funções MAIOR e MENOR, uma vez que, como seriam muitas linhas a inserir a fórmula, isso deixaria a planilha lenta.

Prometo ao fernando que não enviarei o arquivo sem estar compactado!

Existem 2 colunas principais na planilha. Uma contém números que se repetem eventualmente, mas estes começam em 1 e vao até 250. Como se repetem, não significa que são 250 linhas. Em outra coluna eu tenho um texto. Este texto será o outro parãmetro. O primeiro parâmetro é a condição 1,2,3...(=maior(a1:a10;1...=maior(a1:a10;2...-maior(a1:a10;3).

A intenção é inserir em outra coluna o maior ou menor valor baseado na primeira coluna, desde que exista um determinado texto na segunda coluna. Isso sucessivamente, digamos, na célula C1 o maior valor, na célula C2 o segundo maior valor, na célula c3 o terceiro maior valor...

Quando falo MAIOR ou MENOR valor, significa que serão gerados 2 relatórios, um inciado com o menor e outro com o maior valor.

Esse número encontrado será um parãmetro para uma pesquisa de outras informações. Daí que, quando inseridas várias fórmulas matriciais a planilha ficar lenta....

É isso. O código do Mauro é parte da minha dúvida. A outra parte diz respeito a inserir os números encontrados em determinadas células. Não é apenas encontrar o maior ou menor número, mas inserir esse número em uma célula específica ou coluna.

 
Postado : 06/05/2015 5:39 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

luiz, li varias vezes sua postagem e confesso que fiquei confuso, mas enquanto aguardamos o seu modelo conforme orientado pelo Fernando, segue um modelo em que utilizamos as funções atraves do VBA com condições retornando os valores para as celulas definidas.

MAIOR (LARGE) - MENOR (SMALL)

espero que ajude.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 06/05/2015 1:10 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Mauro,

Fiz algumas modificações no seu código e adaptei com sucesso.

Obrigado!

Vou abrir um novo post que tem uma relação a este. espero que possa me ajudar.

 
Postado : 07/05/2015 6:19 am