Página 1 de 1

Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 16 Set 2021 às 19:35
por Choicekiller
Caros, boa noite.

Por favor, alguém poderia me ajudar na seguinte situação:

Tenho uma macro com Array que ordena na coluna (I) com base nos dados da coluna (C).
Entretanto, está repetindo a ordem de dois valores (em destaque, planilha anexo).

Tem um exemplo a partir da coluna (M) via fórmulas , cujo resultado desejo alcançar com o Array(VBA).

Desde já, agradeço.

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 16 Set 2021 às 21:03
por Jonathaluis
Boa noite!

Segue planilha.

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 16 Set 2021 às 23:22
por Choicekiller
Jonathaluis, boa noite.

Obrigado por sua resposta ;)

Descobri uma outra forma de obter o mesmo resultado, vou estudar seu código e compreender o trecho abaixo.
.FormulaR1C1 = "=RANK.EQ(RC[-6],R2C[-6]:R11C[-6],0)+COUNTIF(R2C3:RC[-6],RC[-6])-1"

Tenho uma pergunta:
É possível conseguir esse resultado dentro do Array (VBA)?

O porquê da pergunta:
Quando descobri o Array, fiquei fascinado com sua velocidade, flexibilidade e segurança.
Foram esses os motivos pelo qual, me motivaram a querer estudá-lo. Logicamente que meu conhecimento é superficial, por esse motivo, recorri ao fórum para solicitar ajuda.

Ou seja,
A flexibilidade que o Array proporciona na manipulação dos dados, inserindo ou excluindo linhas e colunas, sem comprometer a base;
A pré-visualização dos dados compilados na "janela de varáveis locais", sem recorrer ao objeto range e derrubá-los de uma única vez na planilha em milésimos de segundos;
Saber que a apresentação dos dados compilados, foram obtidos integramente da base, sem a preocupação da seleção parcial, ou o arrasto equivocado de fórmulas, ou até mesmo os equívocos por parte do usuário, tornam o processo mais ágil, dinâmico e seguro.
Espero ter justificado minha pergunta. ;)

Desde já, agradeço sua atenção.

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 16 Set 2021 às 23:59
por Jonathaluis
É desse tipo de motivação que gosto, amanhã dou uma olhada novamente no seu código e faria de forma diferente, eu só gostaria de entender qual o critério de desempate para o valor 100 nesse caso, é a coluna ao lado? Porque a fórmula de somarproduto só estava usando a coluna que tinha 100, 99, 97....

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 17 Set 2021 às 15:37
por Jonathaluis
Boa tarde!
Fiz uma estrutura de ordenação para chegar no resultado que você espera.
Não utilizei fórmulas, apenas movimentação dos valores para ordenação e uma coluna auxiliar.
Criei uma aba explicando e ilustrei mais ou menos.

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 18 Set 2021 às 04:34
por Choicekiller
Jonathaluis, bom dia!

Primeiramente quero agradecer sua disponibilidade e atenção. :D

Tentei adaptar sua solução, que por sinal é incrível, porém complexa para este humilde aprendiz.

Confesso que me enrolei todo com os Array's Temp(0), arr(j, 1) e arr(i, 1).
Creio não ter entendido a lógica de trabalhar com colunas em loop dentro do Array (VBA). Caso possa sugerir algum material, livro, etc... Ficaria muito grato!

Segue planilha em anexo, com os critérios solicitado anteriormente e a nova base com as colunas que não consegui adaptar.
Espero que aceite o desafio.

Obrigado pela ajuda e por compartilhar seu conhecimento.
Valeu ;)

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 20 Set 2021 às 08:51
por Jonathaluis
Bom dia!
Baixei sua planilha e encontrei um problema, ví que você está gerando os números de 85 a 100 de forma aleatória, acontece que qualquer alteração que eu fizer nas células faz com que as formulas executem novamente e atualizem, então quando executar a macro e colar na planilha as células irão se atualizar e o resultado da macro será em relação aos números anteriores e não aos atuais.
Como quer proceder?
Dá para criar uma macro que gera as fórmulas nos campos e outra que no momento que for pegar os valores para calcular a nota transforme as fórmulas em valor fixo. Nessa teria 2 botões, um para gerar os aleatórios e outro para a ordem.
Dá para gerar os números aleatórios em uma macro e colocar só os resultados na tabela, e calcular a ordem em cima desses novos.

Sobre o material eu mesmo vou tentar te explicar em uma planilha a parte.

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 20 Set 2021 às 09:17
por Jonathaluis
Bom dia!
Segue uma explicação simples de lista e matriz (arrays).

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 20 Set 2021 às 12:25
por Choicekiller
Bom dia, Jonathaluis.
Criei os campos com a função aleatoriosEntre, apenas para ter os valores e ajudar na simulação. Tanto os valores fixos ou uma macro para gerá-los atenderia, pois a ordenação só se dará a partir desse ponto.

Obrigado pelo material, vou estudá-lo.

Qualquer dúvida, estou a disposição.
Agradecido.

Re: Rank (Ordem.EQ) em Array via VBA, sem repetições

Enviado: 20 Set 2021 às 15:33
por Jonathaluis
Boa tarde!
Criei um aleatório para os números
e na ordenação eu apliquei a mesma macro para as colunas H:L, não entendi os critérios que colocou nas celulas N3:R3

Segue a planilha.