Notifications
Clear all

SOMAPRODUTO no vba excel.

26 Posts
3 Usuários
0 Reactions
5,305 Visualizações
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Pessoal,

Fazer a formula SOMAPRODUTO no Excel é, de certo modo, fácil.

Porém não se realizá-la no VBA EXCEL.

Como é feita?

 
Postado : 27/04/2015 1:48 pm
(@edcronos)
Posts: 1006
Noble Member
 

troço chato de fazer

quase mastigado
tenta adaptar

Private Sub Image23_Click()

pln = "bd"
LF = Sheet(pln).Cells(Sheet2.Rows.Count, "F").End(xlUp).Row
fator = "SAÍDA"
valores = "F2:F" & LF
fatorg = "E2:E" & LF
datini = "G2:G" & LF
datfim = "H2:H" & LF


        TextBox6.Value = Application.WorksheetFunction.SumProduct( _
        (Sheets(pln).Range(valores)) & "*" & _
        ((Sheets(pln).Range(fatorg) & "=" & fator)) & "*" & _
        ((Sheets(pln).Range(datini) & ">=" & TextBox3.Value)) & "*" & _
        (Sheets(pln).Range(datfim) & "<=" & TextBox4.Value)))

End Sub

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 29/04/2015 8:15 am
(@edcronos)
Posts: 1006
Noble Member
 

cara jogar o valor para a planilha até é facil,

Sub Imag()

    pln = "bd"
    LF = Cells(Rows.Count, "F").End(xlUp).Row
    fator = """SAÍDA"""
    valores = "F2:F" & LF
    fatorg = "E2:E" & LF
    datini = "G2:G" & LF
    datfim = "H2:H" & LF
    dt1 = 41397
    dt2 = 41397

    dd = "(" & valores & ")*(" & _
     fatorg & "=" & fator & ")*(" & _
     datini & ">=" & dt1 & ")*(" & _
     datfim & "<=" & dt2 & ")"
      
  Cells(1, "J").Formula = "=SumProduct(" & dd & ")"
    
   MsgBox Cells(1, "J").Value

mas com range gerada na aplicação direta é uma droga

eu já teria feito um loop em cima dos valores

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 29/04/2015 10:01 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Uma outra sugestão com a formula na planilha e o resultado através do formulario.

SomarProduto Datas e Texto

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/04/2015 10:45 am
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Edcronos,

O seu código, uma vez adaptado no meu sistema, certamente terá um tempo de execução mais rápido do que o exemplo sugerido pelo Mauro, mas tive dificuldades para adaptá-lo. Caso você puder, pelo que, por gentileza, insira o seu código na planilha que disponibilizei como exemplo.

Quanto ao exemplo do Mauro, mesmo fazendo uso de células, eu o achei muito interessante.

Obrigado.

 
Postado : 29/04/2015 1:53 pm
(@edcronos)
Posts: 1006
Noble Member
 

olha, o metodo do mauro foi uma aplicação mais direta da minha segunda alternativa

isso pq usar range montada em Application.WorksheetFunction é bem complicado
pq ranges montadas são como textos

mas se vc estudar as referencias talvez vc consiga adaptar

parte da minha solução usa apenas uma celula
e vc pode adicionar as referencias da textbos diretamente nos campos que eu separei


'coloque em um modulo e veja como funciona, assim vai poder fazer testes mais facilmente 
Sub Imag()

    LF = Cells(Rows.Count, "F").End(xlUp).Row vai pegar a ultima linha da coluna de valores

    fator = """SAÍDA"""
    valores = "F2:F" & LF           ' coluna onde tem valores para somar
    fatorg = "E2:E" & LF             ' a coluna onde vai procurar se é saida ou entrada
    data_ini = "G2:G" & LF      ' a coluna onde vai procurar a menor data
    data_fim = "H2:H" & LF        ' a coluna onde vai procurar a Maior data

    dt1 = 41397 'aqui vc coloca o valor da textbox3 a menor data de procura
    dt2 = 41397 'aqui vc coloca o valor da textbox4 a maior data de procura

    dd = "(" & valores & ")*(" & _
     fatorg & "=" & fator & ")*(" & _
     data_ini & ">=" & dt1 & ")*(" & _
     data_fim & "<=" & dt2 & ")"
     
  Cells(1, "J").Formula = "=SumProduct(" & dd & ")"
  ' depois vc pega o valor da celula e aplica no textbox

   MsgBox Cells(1, "J").Value
end sub

olha vc aplicar o valor na celula e depois le para o textbox não vai influenciar na velocidade afinal é por interferência humana a busca
existe varias maneiras de se fazer

Se vc se esforçar um pouco eu garanto que vc consegue aplicar e do jeito que vc quer
eu só gostei pq aprendi a usar o somaproduto que nunca tinha usado
e no momento estou com um projeto meu para resolver
boa sorte

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 29/04/2015 2:37 pm
(@edcronos)
Posts: 1006
Noble Member
 

infelizmente eu sou irritantemente persistente
depois de varias tentativas e pesquisas

acabei de lê que
não tem Application.WorksheetFunction.
para SumProduct
não sei se é certo

então ou vc usa outra função
ou usa na célula mesmo como eu e o mauro falamos
mas não vai perder velocidade

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 30/04/2015 10:42 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

infelizmente eu sou irritantemente persistente
depois de varias tentativas e pesquisas

acabei de lê que
não tem Application.WorksheetFunction.
para SumProduct
não sei se é certo

então ou vc usa outra função
ou usa na célula mesmo como eu e o mauro falamos
mas não vai perder velocidade

Ed, estava um pouco apurado e não retornei mais a este tópico, mas tem sim como utilizar o SUMPRODUCT, acontece que no VBA temos algumas diferenças, e dependendo do caso Application.WorksheetFunction funciona, e para outros casos como deste tópico, temos de utilizar o Método EVALUATE e tratar as Datas como Long e transforma-las no seu valor decimal para poder utilizar como Variáveis vindas de textbox, se formos utilizar as datas diretamente na rotina, não precisamos converte-las.
Vou baixar o anexo novamente que não tenho neste pc e implementar as rotinas e depois posto.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 01/05/2015 4:32 pm
(@edcronos)
Posts: 1006
Noble Member
 

ola mauro,
apesar do autor não estar muito interessado,
e apenas quer a solução pronta sem se importar em contribuir com o próprio aprendizado

eu não sou de usar Application.WorksheetFunction.
já teria feito um loop nos valores
mas apenas passei oq li, e como falei não estava muito certo do fato ser real ou não

mas eu tinha colocado as dadas como long no teste como vc pode ver na macro que postei, e eu testei de varia maneira "claro que não todas :P "
mesmo pq o autor tem que ser prestar na aplicação da macro por si mesmo, afinal ele não é um iniciante

as referencias são difíceis de usar apesar de que em formulas para celulas nunca tive problemas

mas se vc tiver uma maneira de usar, eu estou afim de aprender

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 01/05/2015 4:45 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ed, com tanto tempo já participando de Foruns, já me acostumei ao não retorno de muitos solicitantes e alguns nem se preocuparem em analisar as rotinas para aprenderem, não vou dizer que é ocaso do autor, mas infelizmente faz parte, se fosse me preocupar com isto, não participava mais de foruns.

Vou preparar um modelo e colocar na Biblioteca, poderá servir para aquele que precisarem.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 01/05/2015 5:04 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Montei um exemplo convertendo a função SOMARPRODUTO para uso no VBA conforme os critérios deste tópico, anexei o mesmo no Forum Biblioteca, de uma olhada se é isto o que pretende, se for é só ajustar ao seu modelo.

SOMAPRODUTO x SUMPRODUCT - VBA - SOMARPRODUTO 3 CRITÉRIOS
viewtopic.php?f=21&t=15649

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/05/2015 12:10 am
(@edcronos)
Posts: 1006
Noble Member
 

pelo que eu vi não é bem Application.WorksheetFunction.
é similar,
no caso a formula pode ser exatamente como se faria para aplicar em uma célula, mas com suas peculiaridades

funciona, e eu aprendi mais uma,
apesar de não ter essa paciência de fazer tudo tão bonitinho como vc fez
até quando eu baixo algo , se eu quiser entender eu bagunço para conseguir
até as explicações eu tiro para não atrapalhar

mas bem,
existe mesmo 1000 maneiras
o problema é saber a maneira certa de se fazer :P

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 02/05/2015 1:54 am
Página 2 / 2