Ir para conteúdo
Fórum Script Brasil

Armando Nogueira

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por Armando Nogueira

  1. :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:



    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

    somatoria_temp = Worksheets("Plan1").Cells(posicao_setada, 3).Value +
    Worksheets("Plan1").Cells(posicao_anterior, 3).Value

    ' 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

    posicao_anterior = posicao_anterior - 1

    Loop

    posicao_setada = posicao_setada - 1
    Loop

    [/codebox]

×
×
  • Criar Novo...