Ir para conteúdo
Fórum Script Brasil
  • 0

Aproxima Valores


bEbEr

Pergunta

Galera.. quero sabe o seguinte:

Abaixo montei uma tabela na planilha PLAN1. Na PLAN2 tem os seguintes valores: A(A1) e 90(B1). Quero um botão que procure somar os valores mais aproximados possíveis da coluna C da PLAN1 apartir do valor determinado na PLAN2 B1. Exemplo: no caso quero que selecione os que tem TIPO A na PLAN1 e some os valores da coluna VALOR. Nesse caso ele iria somar 105, que seria o total, mas eu quero que ele some só até 90, e procure os valores mais aproximados possiveis. Nesse caso ele iria pegar o 20 do TIAGO, 50 do JOAO, 20 do TIAGO2 que dariam os 90. Após feito isso, quero que ele pegue os nomes, tipo e valores selecionados e jogue pra PLAN2.

NOME TIPO VALOR

TIAGO A 20

ANA B 10

JOAO A 50

FERNANDO C 5

RIC A 5

TIAGO2 A 20

ANA2 D 10

FEH A 10

Help ai galera..

:S

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Salve!

Para fazer a soma dos valores que contém o TIPO 'A' basta fazer um While percorrendo toda a coluna enquanto houver valores. Aí tu faz as comparações devidas e joga o valor para onde deseja.

No caso de somar para cada um seria melhor, em questão de projeto, se houvesse uma planilha com as descrições. Porém, se não houver você pode usar uma lista (vetor) com todas as descrições desejadas.

Ah, se ainda houver um Form (como não foi citado nada :D) você poderia pegar a sigla que deseja fazer a soma.

Abraços,

William Rodrigues

Link para o comentário
Compartilhar em outros sites

  • 0

Daeee Willian..

Sei que devo usar o While.. mas o que quero saber é que tp de comando devo usar pra fazer esse esquema de somar somente até 90, pois c você somar toda a coluna A ele vai dar um total de 105.

Link para o comentário
Compartilhar em outros sites

  • 0
Sei que devo usar o While.. mas o que quero saber é que tp de comando devo usar pra fazer esse esquema de somar somente até 90, pois c você somar toda a coluna A ele vai dar um total de 105.

É garantido que somando de cima para baixo sequencialmente *sempre* vai ser possível dar 90? Se sim, é só fazer um While com uma condição como "soma <> 90". Se não, aí a coisa complica um pouco porque vai pode ser necessário "pular" algum valor e testar a soma com o próximo (ou com o anterior).

Abraços,

graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

graymalkin..

dificilmente vai estar em sequencia.. é como você falou.. vai ter que pular algum valor e testar a soma com o próximo ou anterior e assim sucessivamente.. até chega nos 90.. mais tp.. não precisa necessariamente chegar nos 90 exatos mais sim aproxima o máximo possível..

Link para o comentário
Compartilhar em outros sites

  • 0
dificilmente vai estar em sequencia.. é como você falou.. vai ter que pular algum valor e testar a soma com o próximo ou anterior e assim sucessivamente.. até chega nos 90.. mais tp.. não precisa necessariamente chegar nos 90 exatos mais sim aproxima o máximo possível..

Foi o que imaginei. Hummm... isso vai exigir uma certa criatividade, né? Bom, a questão é: com "aproximar o máximo possível" você quer dizer fazer *todas* as somas possíveis e ver qual chega mais perto (ou é igual a 90)? Ou simplesmente a primeira soma mais próxima já é aceitável? Porém, se for este último caso, você precisa definir quão próximo é o mínimo necessário (por exemplo, no mínimo, 85 ou 89).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

tp.. a melhor coisa a se fazer então.. acho que é fazer todas as somas possíveis e ver a qual chegou mais próximo.. agora tem que ver como :S

A quantidade de valores é fixa? Se for, dá para gerar as combinações com uma série de For... Next.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
não.. pode variar.. pode ter 5 como 10.. mass..

É, por isso que eu disse que isso iria exigir uma certa criatividade. E, provavelmente, não vai se utilizar um For... Next, se a quantidade de valores é variável, mas sim um Do While.

for.. next? como que vo usar?

tem como monta um ex.?

Bom, o exemplo abaixo gera todos os arranjos de 5 números (de 1 até 5) tomados três a três:

    máximo = 5
    For i = 1 To máximo
        For j = 1 To máximo
            For k = 1 To máximo
                If i <> j And j <> k And i <> k Then
                    Debug.Print i & "+" & j & "+" & k & " = " & i + j + k
                End If
            Next k
        Next j
    Next i

Lembrando que isso *não* resolve o seu caso, porque note que a quantidade de Fors é que determinam a quantidade de elementos por arranjo. Além disso, como em um arranjo a ordem importa, 3+4+5 não é o mesmo que 5+4+3, sendo que para o seu caso, como é a soma que importa, não haveria necessidade de verificar duas vezes (seria um desperdício).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

mas tp.. a quantidade de valores não seriam a quantidade de elementos A? Que neste exemplo seria 5?

NOME TIPO VALOR

TIAGO A 20

ANA B 10

JOAO A 50

FERNANDO C 5

RIC A 5

TIAGO2 A 20

ANA2 D 10

FEH A 10

ou eu entendi errado?

falou abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

mas tp.. a quantidade de valores não seriam a quantidade de elementos A? Que neste exemplo seria 5?

NOME TIPO VALOR

TIAGO A 20

ANA B 10

JOAO A 50

FERNANDO C 5

RIC A 5

TIAGO2 A 20

ANA2 D 10

FEH A 10

ou eu entendi errado?

A quantidade de valores poderia ou não ser a quantidade de elementos de A. Você tem 5 As, porém a soma de apenas 3 deles (50+20+20) dá os 90.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

hmm.. entendi..

e não tem como fazer todas as somas possíveis?

tp.. pega o primero A sozinho do Tiago.. que da 20.. dps pega o segunda sozinho A do Joao.. que da 50.. dps i juntando o A do Tiago com o A do Joao... e dps esses dois A mais o Tiago2.. entende.. fazer todas as somas possíveis até chegar num valor mais próximo a 90.

tem como?!

flww

abraço

:)

Link para o comentário
Compartilhar em outros sites

  • 0

hmm.. entendi..

e não tem como fazer todas as somas possíveis?

tp.. pega o primero A sozinho do Tiago.. que da 20.. dps pega o segunda sozinho A do Joao.. que da 50.. dps i juntando o A do Tiago com o A do Joao... e dps esses dois A mais o Tiago2.. entende.. fazer todas as somas possíveis até chegar num valor mais próximo a 90.

Sim, essa é a idéia.

tem como?!

Se conseguimos imaginar, é claro que tem como. Só não espere encontrar uma solução miraculosa de uma linha, é claro. :rolleyes:

Uma solução que imaginei seria sempre somar todos os elementos, ou seja, se você tem 10 números, você sempre vai somar os 10. Só que você vai substituir alguns deles por 0 (de forma que a soma deles não alteraria o resultado). Ou seja, a idéia seria fazer o 0 "caminhar" na lista de números, tanto em posição quanto em quantidade. *Acredito* eu que isso possibilitaria fazer as somas desejadas. Porém, implementar isso exigiria algum tempo e altas doses de cafeína... Mas, pelo menos você já tem algum ponto de partida. Lembrando, é claro, que devem haver centenas de maneiras diferentes de se resolver isso (e eu não sou um Matemático, portanto não espere muito de minha pobre cabecinha). Não tenho tido muito tempo disponível, mas se a amanhã eu tiver eu tentarei fazer algo (só realmente espero que você não fique "esperando" que eu resolva o caso sozinho).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

boaa Graymalkin..

agora que me toquei com o 0..

irei fazer uns teste aqui hoje.. só me diz uma coisa.. qual comando eu vou usar pra dizer o valor mais próximo possível.. ex.: resultados foram: 40; 50; e 80. O 80 é o mais próximo de 90. Mais qual comando que vou usar pra idicar isso?! Pois eu só sei dos valores <> != >= sabee.. aqueles que nós sempre usamos..

se tiver alguma idéia me avise!

:]

flww aí

abraço!

:)

Link para o comentário
Compartilhar em outros sites

  • 0
só me diz uma coisa.. qual comando eu vou usar pra dizer o valor mais próximo possível.. ex.: resultados foram: 40; 50; e 80. O 80 é o mais próximo de 90. Mais qual comando que vou usar pra idicar isso?! Pois eu só sei dos valores <> != >= sabee.. aqueles que nós sempre usamos..

De fato, não tem um jeito de dizer isso (aliás, ter tem, e seria algo chamado Lógica Fuzzy ou Lógica Nebulosa). Mas, no caso, o mais próximo seria o maior valor encontrado menor ou igual a 90. Ou seja, vai ser necessário guardar todas as somas previamente realizadas para verificar qual é a mais próxima.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

e como funciona essas lógicas?

nunca ouvi fala delas oO

Conheça mais sobre ela aqui: http://en.wikipedia.org/wiki/Fuzzy_logic

Sendo que o seu problema *não* é tão complexo assim a ponto de ser necessário utilizar este tipo de lógica (mas poderia-se, é claro).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

ptzz..

bom que é td em ingles

:S

alguém ai tem a trad. pra por.?

achei la..

alksdjalksjd

:D

A versão em Inglês tem bem mais informações do que a versão em Português. Se bem que este seu post deixou dúvidas quanto ao seu real idioma... <_<

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

era 2 posts meu ali..

o site junto os dois

açlskdjaçklsd

mais tp..

graymalkin.. você por acaso tem algum exemplo ai pra que eu possa ver como funciona?!

pow.. não consegui entender muito bem como está la no site

;~

flwww

Link para o comentário
Compartilhar em outros sites

  • 0
e qual seria a outra opcao de programação?

Eu falei nesse post: http://scriptbrasil.com.br/forum/index.php...st&p=354622

De fato, não tem um jeito de dizer isso (aliás, ter tem, e seria algo chamado Lógica Fuzzy ou Lógica Nebulosa).

meu, era a notacao polonesa, agora isso. onde você ouve falar dessas coisas??

Huahuahuhauahuhau!!! :lol: :lol: :lol: Eventulamente, em minhas pesquisas sobre programação, eu acabo topando com essas coisas... são elas que me perseguem! Hehehehe... :P

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

mas no caso.. como faço pra ele somar todos os campos <> de ""

tp..

A1 = 50

A2 = 10

A3 = 25

ele iria somar A1 + A2.. A2 + A3.. e A1 + A3..

mais queria saber como monto isso no VBA para somar?

vlw

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...