Evo da se ispravim. Sumproduct funkcija se može pozvati iz VBA, kao i svaka druga Excel funkcija, ali je problem što ona zahteva jednodimenzionalne nizove, a opseg se pretvara u više dimenzionlane nizove (čak i kad je jedna kolon) i onda je to malo teže.
Način koji bih ja uradio je preko petlje - to je čisto i jednostavno
Code:
For r = 1 To ActiveCell.Row - 1
if uslov1 And uslov2 And uslov3 then
rezultat = rezultat + Range("G" & r)
end if
Next i
gde uslove naravno zameniš sa ogovarajućim logičkim uslovima
Sa funkciojm Sumproduct a bez pretumbavanja
Code:
ActiveCell.Formula = Evaluate("=-SUMPRODUCT((a1:a" & ActiveCell.Row - 1 & "<=a" & ActiveCell.Row & ")*" & _
"(a1:a" & ActiveCell.Row - 1 & ">= date(2008,3,18))* " & _
"(b1:b" & ActiveCell.Row - 1 & "=" & obj & ")*" & _
"(f1:f" & ActiveCell.Row - 1 & "=" & Chr(34) & naziv & Chr(34) & _
"),g1:g" & ActiveCell.Row - 1 & ")")
Izmena da datum nije fiksna vrednost nego promenljiva obezbeđuje se izmenom tako što proslediš promenljivu dat2 u delovima (godina, mesec, dan) funkciji date
Code:
Sub Test()
' Pozivanje SUMPRODUCT funkcije iz koda
' sa jedim datumskim uslovom
' Za elitesecurity forum
' P.Jovanovic
'
Dim dat(1 To 3) As Date
dat(2) = "3 / 18"
God = Year(dat(2))
Mes = Month(dat(2))
Dan = Day(dat(2))
obj = 15
naziv = "test"
With ActiveCell
.Formula = Evaluate("=-SUMPRODUCT( " & _
"(a1:a" & ActiveCell.Row - 1 & ">=date(" & God & "," & Mes & "," & Dan & "))*" & _
"(b1:b" & ActiveCell.Row - 1 & "=" & obj & ")*" & _
"(f1:f" & ActiveCell.Row - 1 & "=" & Chr(34) & naziv & Chr(34) & _
"),g1:g" & ActiveCell.Row - 1 & ")")
End With
End Sub
Nije to loše Rembrante, samo što ne bi dodao još malo boje?