I did it with a UDF:
Option Explicit
Function sumP(source As Range)
Dim index1 As Long
Dim index2 As Long
Dim data() As Long
Dim result As Long
Dim index As Long
ReDim data(1 To 2, 1 To source.Rows.Count) As Long
For index = 1 To source.Rows.Count
Select Case source.Cells(index, 1)
Case 1
index1 = index1 + 1
data(1, index1) = source.Cells(index, 2)
Case 2
index2 = index2 + 1
data(2, index2) = source.Cells(index, 2)
End Select
Next
For index = 1 To UBound(data, 2)
result = result + data(1, index) * data(2, index)
Next
sumP = result
End Function
I'm pretty sure that there's a better way. pass the range (both columns) to
the function. The loop pairs off the first 1 with the first 2, the second 1
with the second 2 and so on .... at least that's how I understood your
query.
once the values are paired up, the second loop simply multiplies and sums
them
"Jay" <(E-Mail Removed)> wrote in message
news:A4D6FCCE-FB79-4406-991C-(E-Mail Removed)...
> Here's a simple example of something I'm trying to figure out.
> A B
> 1 5
> 1 7
> 2 4
> 2 9
>
> Can I calculate (5*4)+(7*9)=83 using a sumproduct?
>
> I tried this but it doesn work for what I think is an obvious reason.
> SumProduct(((B1:B4)*(A1:A4=1)),((B1:B4)*(A1:A4=2))). I believe this isn't
> working because there is never a case where A1:A4=1 AND A1:A4=2.
> Therefore I
> get the answer = 0.
>
> I'm also having a hard time trying to figure out how I would do this in a
> loop of some kind as an alternative. Can I define B1:B2 as a range and
> B3:B4
> as a range and pass them to a function that computes B1*B3 + B2*B4? How
> do I
> define those ranges in code?
>
> Thanks for your help.
>
>
>
>
|