none
Atingir Soma RRS feed

  • Pergunta

  • Olá pessoal, boa noite tudo bem?

    Estou realmente perdido no mundo do VBA. Comecei a mexer em programação a poucos meses e peço desculpas pela minha ignorância mas vamos lá.

    Estou executando a planinha de atingir soma http://www.ambienteoffice.com.br/officevba/atingir_meta_de_soma/

    e ela funciona perfeitamente, mas se tiver poucas linhas na coluna A. O que acontece é que tenho mais de 40 mil linhas para que me seja retornado a soma conforme a meta só que num determinado momento aparace um erro na planilha. O Felipe Costa Gualberto fez essa observação que "Note que esse algoritmo pode demorar muito tempo para executar dependendo do número de elementos na coluna A, pois ele é executado através da força bruta, e seu custo computacional cresce exponencialmente".

    O que eu preciso fazer para que eu consiga rodar a macro perfeitamente, independente da quantidade de linha??

    Agradeço de verdade pela ajuda e Felipe Costa Gualberto parabéns pelo seu trabalho. É mto legal e admirável.

    Abs, 

    Elias

    terça-feira, 28 de outubro de 2014 03:20

Todas as Respostas

  • É uma limitação do VBA. Se quiser melhorar a performance você pode tentar realizar a mesma lógica numa aplicação em .NET.
    terça-feira, 28 de outubro de 2014 20:25
  • Olá Deric,

    Então não sei nem por onde começar! Nunca ouvi falar sobre .NET.

    Ferro...

    Obrigado por sua resposta.

    quarta-feira, 29 de outubro de 2014 19:45
  • @Eliasbarbieri

    Elias, obrigado pelas palavras e por utilizar o código.

    Como percebeu, com 40 mil linhas de registro, esse código é inadequado para você. Neste ponto, saímos de um problema de VBA e caímos no mundo dos algoritmos.

    Digo com toda certeza que deve existir um algoritmo que otimiza o tempo de execução desse problema. Provavelmente a resolução do mesmo envolve classificar a coluna dos números em ordem crescente e por aí vai.

    Infelizmente, não tenho conhecimento desse tipo de algoritmo e teria que estudar otimização de algoritmos para resolver. Vamos dizer que minha solução é a mais "inocente" possível.

    Talvez seja melhor você buscar pela internet algo fora do Excel, não? Esse tipo de problema parece ser comum, e eu não me assustaria de ver por aí algum software específico para isso.

    @Deric

    Deric,

    Um código compilado em .NET é mais lento que um em VBA.

    A hierarquia é C++ (XLL) mais rápido que VBA que é mais rápido que .NET

    Explicação: códigos compilados .NET possuem um overhead maior que o VBA.

    C++ para Excel compilado possui o melhor desempenho e compatibilidade (a saber, o Excel é escrito em C++)


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 29 de outubro de 2014 19:58
    Moderador
  • Felipe, o ponto é que com .NET fatalmente terá mais recursos da plataforma que podem sim, ajudar a melhorar o desempenho de algoritmos. Com algumas estruturas de dados é possível reduzir algoritmos de ordem N para ordem 1, etc, trazendo ganhos de performance consideráveis para muitos cenários. Outro exemplo, é o suporte a Parallel Processing do .NET 4, que pode ser um recurso poderoso para alguns processos que requerem alto desempenho.

    Imagino que seja um especialista em VBA, logo respeito e imagino que tenha várias considerações sobre a ferramenta, etc. Contudo, me reservo a não entrar no mérito de discutir plataformas neste fórum, pois nem mesmo é o foco.

    Abs.,

    quinta-feira, 30 de outubro de 2014 01:35
  • Você tem razão em suas colocações. A quantidade de bibliotecas disponíveis no por aí de .NET é grande, e com certeza em vários casos a inteligência dos algoritmos de algumas dessas bibliotecas supera o pouco ganho de desempenho do código de VBA compilado.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 10 de novembro de 2014 20:02
    Moderador