galera sou novo neste forum, porém estou com uma divida, tendo em vista que não trabalho com vba, mas fui designado para
fazer um sistema nele.
Assim,
suponhamos que tenho 1.000 valores em uma coluna do excel, porém tenho que localizar por exemplo 3.283,93 reais,
mas como esses valores são quebrados, tem que haver uma somatória de valores para chegar a um valor aproximado ou igual ao que estou procurando....
na mesma "folha", tem um campo onde o usuário colocar o valor a ser procurado, um campo para colocar o valor de tolerância mínima e máxima....
Assim até a combinação de 2 a 2 estou conseguindo fazer sem problemas, mas com uma combinação de 3 a 3, 4 a 4 .... já não estou conseguindo....
se alguém puder dar um help ai eu agradeço.
segue o codigo:
A minha ideia é ler a qntidade total de celulas com valores sendo que o valor total com certeza vai variar, uma semana pode ser somente 5 numeros, mas na próxima pode ser 1000, então lei o a qntidade total, depois pego a ultima posição valida e venho lendo de baixo para cima, mas vale lembrar que os valores estarão ordenados do menor para o maior.
Sub Busca_valor()
' Variaveis que eu utilizarei
linha = 5 Numero = Worksheets("Plan1").Cells(linha, 5).Value Tolerancia = Worksheets("Plan1").Cells(linha, 7).Value combinacoes = 5 Max_permitido = Numero + Tolerancia Min_permitido = Numero - Tolerancia
' Um Loop para pegar o total de linhas com valores. Do While Worksheets("Plan1").Cells(linha, 3).Value <> "" maior_posicao = linha linha = linha + 1 ultima_linha = linha - 1 ' " me retorna-me " a ultima linha, com valor. ultima_posicaoComvalor = ultima_linha coluna = ultima_posicaoComvalor Loop
' Limpa a coluna 4, esta coluna recebe o "X", ou seja, estou "limpando" para uma Nova Busca. Do While Worksheets("Plan1").Cells(coluna, 3).Value Worksheets("Plan1").Cells(coluna, 4) = "" coluna = (coluna - 1) If coluna = 4 Then Exit Do End If Loop ' fim loop que limpa a coluna 4.
' estou localizando o "pointer", para as linhas. posicao_setada = ultima_posicaoComvalor posicao_anterior = posicao_setada - 1 posicao_ini = posicao_anterior
Do While posicao_setada <> 4 <= esta é a ultima posicao com valor, ela vai ficar setada até que a posicao anterior seja igual à. 4
If posicao_anterior = 4 Then posicao_anterior = ultima_posicaoComvalor End If
Do While posicao_anterior <> 4
If posicao_anterior = 4 Then ' se a posicao anterior for igual a 4, então deve sair do loop de dentro. Exit Do End If
' só vai marcar se a somatoria_temp for menor que o valor permitido. If somatoria_temp <= Max_permitido Then
Worksheets("Plan1").Cells(posicao_anterior, 4) = "X" Worksheets("Plan1").Cells(posicao_setada, 4) = "X"
If somatoria_temp >= Min_permitido Then
Worksheets("Plan1").Cells(posicao_anterior, 4) = "X" Worksheets("Plan1").Cells(posicao_setada, 4) = "X"
sairDoLoop = "sim" End If
End If
' Zero a variavel somatoria_temp_Loop para poder pegar os valores das "novas" posições. somatoria_temp_Loop = somatoria_temp_Loop - Worksheets("Plan1").Cells(posicao_anterior, 3).Value somatoria_temp_Loop = somatoria_temp_Loop - Worksheets("Plan1").Cells(posicao_setada, 3).Value
Pergunta
Armando Nogueira
:blink:
Olá,
galera sou novo neste forum, porém estou com uma divida, tendo em vista que não trabalho com vba, mas fui designado para
fazer um sistema nele.
Assim,
suponhamos que tenho 1.000 valores em uma coluna do excel, porém tenho que localizar por exemplo 3.283,93 reais,
mas como esses valores são quebrados, tem que haver uma somatória de valores para chegar a um valor aproximado ou igual ao que estou procurando....
na mesma "folha", tem um campo onde o usuário colocar o valor a ser procurado, um campo para colocar o valor de tolerância mínima e máxima....
Assim até a combinação de 2 a 2 estou conseguindo fazer sem problemas, mas com uma combinação de 3 a 3, 4 a 4 .... já não estou conseguindo....
se alguém puder dar um help ai eu agradeço.
segue o codigo:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.