Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

find sum in list of of numbers

382 views
Skip to first unread message

dvp...@gmail.com

unread,
Jan 4, 2006, 11:27:14 AM1/4/06
to
Hello,

I have a list of numbers in a column and I need to find which numbers
when summed together equal a figure. I have a list of invoice amounts
that I need to match up with payments (the payments are always made for
several invoices so I need to come up with sums of several invoices to
get to this payment amount).

An example would be I have this in the following section (A1:A10):
$17,213.82
$4,563.02
$85,693.42
$1,166.01
$725.90
$580.09
$2,243.75
$240.16
$207.70
$725.90

I need to find which combination of these figures would sum $1,173.76.

Thanks in Advance,
Dza the troubled accountant

Jim Thomlinson

unread,
Jan 4, 2006, 12:10:04 PM1/4/06
to
Here is some code. Note that you need to create references to a couple of
librarys in order tom make this code work (In VBE select Tools ->
References).

'Microsoft Scripting Runtime
'Microsoft VBScript Regular Expressions 1.0 or higher

This code should be placed in a standard module...

Option Explicit
' Original solution created by
' Harlan Grove

Public Sub FindSums()
'This *REQUIRES* VBAProject references to
'Microsoft Scripting Runtime
'Microsoft VBScript Regular Expressions 1.0 or higher

Const TOL As Double = 0.0001 'modify as needed
Dim c As Variant

Dim j As Long, k As Long, n As Long, p As Boolean
Dim s As String, t As Double, u As Double
Dim v As Variant, x As Variant, y As Variant
Dim dc1 As New Dictionary, dc2 As New Dictionary
Dim dcn As Dictionary, dco As Dictionary
Dim re As New RegExp
Dim wks As Worksheet
Application.EnableCancelKey = xlErrorHandler

re.Global = True
re.IgnoreCase = True

On Error Resume Next

Set wks = ActiveSheet
Set x = Intersect(Selection, wks.UsedRange)

If x Is Nothing Then
Err.Clear
Exit Sub
End If

y = Application.InputBox( _
Prompt:="Enter target value:", _
Title:="Find Sums", _
Default:="", _
Type:=1 _
)

If VarType(y) = vbBoolean Then
Exit Sub
Else
t = y
End If

On Error GoTo 0

Set dco = dc1
Set dcn = dc2

Call recsoln

For Each y In x.Value2
If VarType(y) = vbDouble Then
If Abs(t - y) < TOL Then
recsoln "+" & Format(y)

ElseIf dco.Exists(y) Then
dco(y) = dco(y) + 1

ElseIf y < t - TOL Then
dco.Add Key:=y, Item:=1

c = CDec(c + 1)
Application.StatusBar = "[1] " & Format(c)

End If

End If
Next y

n = dco.Count

ReDim v(1 To n, 1 To 3)

For k = 1 To n
v(k, 1) = dco.Keys(k - 1)
v(k, 2) = dco.Items(k - 1)
Next k

qsortd v, 1, n

For k = n To 1 Step -1
v(k, 3) = v(k, 1) * v(k, 2) + v(IIf(k = n, n, k + 1), 3)
If v(k, 3) > t Then dcn.Add Key:="+" & _
Format(v(k, 1)), Item:=v(k, 1)
Next k

On Error GoTo CleanUp
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

For k = 2 To n
dco.RemoveAll
swapo dco, dcn

For Each y In dco.Keys
p = False

For j = 1 To n
If v(j, 3) < t - dco(y) - TOL Then Exit For
x = v(j, 1)
s = "+" & Format(x)
If Right(y, Len(s)) = s Then p = True
If p Then
re.Pattern = "\" & s & "(?=(\+|$))"
If re.Execute(y).Count < v(j, 2) Then
u = dco(y) + x
If Abs(t - u) < TOL Then
recsoln y & s
ElseIf u < t - TOL Then
dcn.Add Key:=y & s, Item:=u
c = CDec(c + 1)
Application.StatusBar = "[" & Format(k) & "] " & _
Format(c)
End If
End If
End If
Next j
Next y

If dcn.Count = 0 Then Exit For
Next k

If (recsoln() = 0) Then _
MsgBox Prompt:="All combinations exhausted.", _
Title:="No Solution"

CleanUp:
If Err = 18 Then
If MsgBox("Do you want to stop searching?", vbYesNo, "Quit?") = vbYes Then
Application.StatusBar = False
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
End
Else
Resume
End If
Else
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
End If
End Sub

Private Function recsoln(Optional s As String)
Const OUTPUTWSN As String = "Findsums Solutions" 'modify to taste

Static r As Range
Dim ws As Worksheet

If s = "" And r Is Nothing Then
If Not SheetExists(OUTPUTWSN, ActiveWorkbook) Then
Application.ScreenUpdating = False
Worksheets.Add Before:=ActiveSheet
Set ws = ActiveSheet
ws.Name = OUTPUTWSN
ws.Cells.NumberFormat = "#,##0.00"
Set r = ws.Range("A2")
Else
Set ws = Sheets(OUTPUTWSN)
ws.Cells.Clear
ws.Cells.NumberFormat = "#,##0.00"
Set r = ws.Range("A2")
End If
recsoln = 0
ElseIf s = "" Then
recsoln = r.Row - 1
Set r = Nothing
Else
Call PostAnswers(s, r)
Set r = r.Offset(1, 0)
recsoln = r.Row - 1
End If
End Function

Private Sub qsortd(v As Variant, lft As Long, rgt As Long)
'ad hoc quicksort subroutine
'translated from Aho, Weinberger & Kernighan,
'"The Awk Programming Language", page 161

Dim j As Long, pvt As Long

If (lft >= rgt) Then Exit Sub
swap2 v, lft, lft + Int((rgt - lft + 1) * Rnd)
pvt = lft
For j = lft + 1 To rgt
If v(j, 1) > v(lft, 1) Then
pvt = pvt + 1
swap2 v, pvt, j
End If
Next j

swap2 v, lft, pvt

qsortd v, lft, pvt - 1
qsortd v, pvt + 1, rgt
End Sub

Private Sub swap2(v As Variant, i As Long, j As Long)
'modified version of the swap procedure from
'translated from Aho, Weinberger & Kernighan,
'"The Awk Programming Language", page 161

Dim t As Variant, k As Long

For k = LBound(v, 2) To UBound(v, 2)
t = v(i, k)
v(i, k) = v(j, k)
v(j, k) = t
Next k
End Sub

Private Sub swapo(a As Object, b As Object)
Dim t As Object

Set t = a
Set a = b
Set b = t
End Sub

Private Sub PostAnswers(ByVal strValue As String, ByVal rng As Range)
Dim aryCSVValues As Variant
Dim intCounter As Integer

aryCSVValues = Split(Mid$(strValue, 2, Len(strValue)), "+")
For intCounter = LBound(aryCSVValues) To UBound(aryCSVValues)
rng.Value = aryCSVValues(intCounter)
Set rng = rng.Offset(0, 1)
Next intCounter
End Sub
--
HTH...

Jim Thomlinson

Dave O

unread,
Jan 4, 2006, 12:13:00 PM1/4/06
to
The answer is:
$725.90
$240.16
$207.70

I've written a program that applies a brute force approach to the task-
it checks every possible combination of the "pool" of numbers to arrive
at the target total. The brute force idea works for comparatively
small pools, but since the number of possible combinations doubles with
each additional pool member the processing time increases
commensurately. One poster to this newsgroup wanted to process a list
of 100 numbers, which amounts to
1,267,650,600,228,230,000,000,000,000,000 possible combinations and
would require the resources of a major government (or maybe just the
NSA) to process.

How many of these do you have? I don't mind doing a few for you.

Bill Martin

unread,
Jan 4, 2006, 12:23:09 PM1/4/06
to

-----------------------------------

I don't believe there is a simple, closed form solution to this problem. What
you have to do is to exhaustively try all possible combinations to see which one
(or *ones*) add up to what you want. This is possible to do with small problems
like the example you've shown, but if there are a "large" number of entries it
will take computer time in excess of the age of the universe to calculate. With
100 entries for example, the number of combinations you'd have to test 1.27
times ten to the 30th power -- a *really* big number. With 20 entries you'd
"only" have about one million combinations to check.

What I would do is add an extra column of only 0 and 1 vales which represents a
binary word in aggregate. Then multiply that column by your dollar values and
sum them. This gives you the what that particular combination adds up to. Then
you need to increment the binary word by one and do it again ... and again.
Until you've tested all combinations.

You're going to need a VBA macro to make this work. I don't think you can do it
with simple formulas.

Good luck...

Bill

Peo Sjoblom

unread,
Jan 4, 2006, 12:33:19 PM1/4/06
to
Another method is by using solver like in this example

http://tinyurl.com/9suck

same constraints with larger numbers


--

Regards,

Peo Sjoblom

"Dave O" <Cycl...@yahoo.com> wrote in message
news:1136394780.3...@g47g2000cwa.googlegroups.com...

Ron Coderre

unread,
Jan 4, 2006, 12:32:03 PM1/4/06
to
Have you tried using Excel Solver

First a little prep work....

A1:A1 (your list of values)
B1:B10 (leave blank)
C1: =A1*B1
(copy that fomula down through C10

C11: =SUM(C1:C10)

Now to use Solver....
Tools>Solver
Set Cell: C11
Equal to the Value of: 1173.76
By Changing Cells: B1:B10
Subject to the Constraints....
(click the add button and constrain B1:B10 to Binary)
Click [OK]
Click [Solve]

Excel will toggle cells B1:B10 between 1 and 0 until it comes up with a
combination that sums to 1,173.76

Does that help?

***********
Regards,
Ron

XL2002, WinXP-Pro

Bill Martin

unread,
Jan 4, 2006, 12:55:45 PM1/4/06
to
I do like your Solver approach -- I hadn't thought of that. Given that this is
an Accounting problem though, how would one get Solver to identify multiple
solutions to the problem when they exist? If you're trying to match invoices
you'd like to know that you're matching them correctly -- not just *possibly*
correctly. Which requires a person to stare at *all* the various possible
solutions and decide which one is most likely given some knowledge of the
customers involved and what they've ordered in the past, etc.

For example, take the list of 10 values that Dza provided and use them all twice
to make 20 entries. Now there are 8 valid solutions, but Solver only seems to
find one and stops.

Personally, I think you need VBA for this problem but I'm open to education...

Bill
----------------------------------

Dave O

unread,
Jan 4, 2006, 1:12:12 PM1/4/06
to
Bill makes a good point- I wrote my original program to find "the"
solution and then stop, but one day on a whim I allowed it to cycle
through the rest of the combinations and found multiple answers to the
problem. Since then re-wrote my program to show all possible
solutions, and frequently find more than one correct answer to the
problem.

Still haven't heard from the OP yet!

Jim Thomlinson

unread,
Jan 4, 2006, 1:13:03 PM1/4/06
to
I am with you on the brute force requirement, but there are a couple of
tricks to minimize the permiutations and combinations. By sorting the list of
input values you can determine to stop testing certain combinations knowing
that certain solutions can not be possible because they are going to be too
large. That is where the code that I posted is very good. I had some other
code that did almost exactly what you were suggesting but it was far slower.
From what I have seen Harlan's code is hard to beat. That being said the list
you are searching should be at most 25 or 30 entries.
--
HTH...

Jim Thomlinson

Ron Coderre

unread,
Jan 4, 2006, 1:18:03 PM1/4/06
to
Solver isn't a panacea....It's just a nice shortcut for relatively simple
situations without having to find or write code. However, if solver finds
one acceptable solution....couldn't we just create another "flag" field to
prevent the same value from being used more than once?

Regarding professional accounting/financial environments, I would hope that
proper internal controls would prevent the situation where a large number of
invoices/checks/whatever would have to be matched (trial and error) against
an amount. Of course there's always the customer who sends a massive check
paying some unknown combination of invoices. Consequently, for those
instances, a phone call to the payee should clear up the confusion
definitively. You wouldn't want to just guess, right?

If a large, multi-solution, iteratave approach cannot be avoided
though....You're right, a vba program would be the way to go.


***********
Regards,
Ron

XL2002, WinXP-Pro

Dave O

unread,
Jan 4, 2006, 1:46:39 PM1/4/06
to
You're right, Jim, the OP could reduce his solution space by
disregarding the numbers greater than his "target" number. In an
accounting environment, however, debits and credits (positive as well
as negative) may need to be considered- the negative numbers may react
with the positive larger numbers to arrive at the correct solution.

Bill Martin

unread,
Jan 4, 2006, 1:45:42 PM1/4/06
to
They do presumably have controls. And I don't think people routinely match
invoices like this. However, contols fail, data gets lost, people do stupid
things. And them somehow you've got to clean up the mess.

Bill
------------------------
Ron Coderre wrote:
> ...snip...

Harlan Grove

unread,
Jan 4, 2006, 1:53:10 PM1/4/06
to
Ron Coderre wrote...

>Solver isn't a panacea....It's just a nice shortcut for relatively simple
>situations without having to find or write code. However, if solver finds
>one acceptable solution....couldn't we just create another "flag" field to
>prevent the same value from being used more than once?

Perhaps. How would you do that since it's not one value but one
combination of values (OK, a vector of 1s and 0s that could be
considered a single vector value in {0,1}^N) that'd need to be
excluded. As I see it, you'd need to use a kludge like SUMPRODUCT of
the vector of 1s and 0s against 2^(ROW(INDIRECT("1:"&N))-1) to produce
unique identifiers for each solution, save them in a list, then use a
COUNTIF = 0 expression on that list with criteria equal to the current
SUMPRODUCT value. And you'd need to automate storing the idenifiers for
previous solutions, so VBA is unavoidable.

>Regarding professional accounting/financial environments, I would hope that
>proper internal controls would prevent the situation where a large number of
>invoices/checks/whatever would have to be matched (trial and error) against
>an amount. Of course there's always the customer who sends a massive check
>paying some unknown combination of invoices. Consequently, for those
>instances, a phone call to the payee should clear up the confusion
>definitively. You wouldn't want to just guess, right?

...

In the real world, reconcilliation of different data sources that
should produce the same results is an unfortunate recurring problem.
And there's often no one to call to get a quick, simple answer.

>If a large, multi-solution, iteratave approach cannot be avoided
>though....You're right, a vba program would be the way to go.

Yup.

Niek Otten

unread,
Jan 4, 2006, 1:52:27 PM1/4/06
to
Use Google's group search: http://groups.google.com/advanced_group_search

, look in Groups *excel*, with all of the words Add up numbers, Author
Harlan (yes, indeed, Harlan Grove)
and you'll find a discussion and very advanced solutions about this subject

--
Kind regards,

Niek Otten

"Dave O" <Cycl...@yahoo.com> wrote in message

news:1136400399....@g44g2000cwa.googlegroups.com...

Bill Martin

unread,
Jan 4, 2006, 1:52:26 PM1/4/06
to
I do agree that Harlan's code looks good. I haven't tried to compile and run
it, but it looks like a good approach.

Bill
------------------------------

Niek Otten

unread,
Jan 4, 2006, 2:04:40 PM1/4/06
to
Sorry, I missed that it had already been mentioned here

--
Kind regards,

Niek Otten

"Niek Otten" <nico...@xs4all.nl> wrote in message
news:OGbEBAWE...@tk2msftngp13.phx.gbl...

Jim Thomlinson

unread,
Jan 4, 2006, 2:07:02 PM1/4/06
to
That is not quite what the code does. What it does is it sorts the original
values lowest to highest. Negatives will obviously be the lowest values. When
it is doing the combinations it moves in the direction of adding the next
highest number. If the combination exceeds the target value then it abandons
moving to the following next highest value because it obviously is not a
possible solution. I am not sure that I explained that very well but sufice
it to say that it works and it speeds up the execution by potentially a few
orders of magnitude.
--
HTH...

Jim Thomlinson

Jim Thomlinson

unread,
Jan 4, 2006, 2:15:03 PM1/4/06
to
When a customer sends you a check for $1,173.76 with no backup then you match
it the best you can. Been there and done that. They will need all possible
solutions because they will want to match to the oldest stuff first.

This kind of code is also very handy for doing year end working papers where
you need to reconcile the ending amount of a Balance Sheet account. Usually
you can match off the vast majority of the debits and credits but very often
you end up with a few entries that (because of reversels, reclassifications
and just plain weirdness) don't match easily. That is another place where
this kind of thing thing is handy.
--
HTH...

Jim Thomlinson

Harlan Grove

unread,
Jan 4, 2006, 2:23:31 PM1/4/06
to
Jim Thomlinson wrote...
...

>Private Sub PostAnswers(ByVal strValue As String, ByVal rng As Range)
> Dim aryCSVValues As Variant
> Dim intCounter As Integer
>
> aryCSVValues = Split(Mid$(strValue, 2, Len(strValue)), "+")
> For intCounter = LBound(aryCSVValues) To UBound(aryCSVValues)
> rng.Value = aryCSVValues(intCounter)
> Set rng = rng.Offset(0, 1)
> Next intCounter
>End Sub
...

This is your code. You should have indicated that. You also made a few
modifications in my original procedures. I don't have an issue with you
modifying my code, just with the lack of any way to distinguish your
code from mine.

Off-topic: I hate long variable names. There's a problematic case for
them in long, complex procedures, but other than typing exercise I
don't see the usefulness in short procedures. Ah, for programmers'
editors in which different colors could be assigned to variable tokens
of different types!

Back on-topic. My own code is at

http://groups.google.com/group/microsoft.public.excel/msg/7419858047398beb

Your comment in your other response in this thread is apt: N > 30 makes
for LONG execution times, but the macro works for larger N. I haven't
torture-tested it, but the large N with skewed values (median value
outside mean +/- 25%) will almost certainly exceed most PC's memory
resources, real and virtual. I have a test case with N=100 cells filled
with values generated by =ROUND(RAND()^-4,2), in the particular case 68
of 100 values < 100, and sought 5000 as the sum. There were 129
combinations of 1 to 6 values summing to 5000 and 464 of 7 (when I
cancelled the macro). Not sure how much information there might be if
there were more than 1 million combinations summing to 5000. How would
anyone choose which one to use?

In other words, the programming was an interesting exercise, but I
still don't believe it provides any value.

Jim Thomlinson

unread,
Jan 4, 2006, 3:00:05 PM1/4/06
to
My appologies for not documenting where I had made modifications to your
code... As a professional courtesy I should have done that and I will
endevour to make the necessary notations at my end. Thanks for sharing your
work and once again I appoligize.

As for long variable names I have always favoured them purely from a
readability standpoint. I have debugged too much code written by others that
was almost impossible to follow. Not to mention it keeps things straight in
my head when I am writing it. Probably more the latter than the former... :-)
--
HTH...

Jim Thomlinson


"Harlan Grove" wrote:

> Ron Coderre wrote...
> >Solver isn't a panacea....It's just a nice shortcut for relatively simple
> >situations without having to find or write code. However, if solver finds
> >one acceptable solution....couldn't we just create another "flag" field to
> >prevent the same value from being used more than once?
>
> Perhaps. How would you do that since it's not one value but one
> combination of values (OK, a vector of 1s and 0s that could be
> considered a single vector value in {0,1}^N) that'd need to be
> excluded. As I see it, you'd need to use a kludge like SUMPRODUCT of
> the vector of 1s and 0s against 2^(ROW(INDIRECT("1:"&N))-1) to produce
> unique identifiers for each solution, save them in a list, then use a
> COUNTIF = 0 expression on that list with criteria equal to the current
> SUMPRODUCT value. And you'd need to automate storing the idenifiers for
> previous solutions, so VBA is unavoidable.
>
> >Regarding professional accounting/financial environments, I would hope that
> >proper internal controls would prevent the situation where a large number of
> >invoices/checks/whatever would have to be matched (trial and error) against
> >an amount. Of course there's always the customer who sends a massive check
> >paying some unknown combination of invoices. Consequently, for those
> >instances, a phone call to the payee should clear up the confusion
> >definitively. You wouldn't want to just guess, right?

> ....

Jim Thomlinson

unread,
Jan 4, 2006, 3:05:02 PM1/4/06
to
My appologies for not documenting where I had made modifications to your
code... As a professional courtesy I should have done that and I will
endevour to make the necessary notations at my end. Thanks for sharing your
work and once again I appoligize.

As for long variable names I have always favoured them purely from a
readability standpoint. I have debugged too much code written by others that
was almost impossible to follow. Not to mention it keeps things straight in
my head when I am writing it. Probably more the latter than the former... :-)

--
HTH...

Jim Thomlinson


"Harlan Grove" wrote:

> Jim Thomlinson wrote...
> ....


> >Private Sub PostAnswers(ByVal strValue As String, ByVal rng As Range)
> > Dim aryCSVValues As Variant
> > Dim intCounter As Integer
> >
> > aryCSVValues = Split(Mid$(strValue, 2, Len(strValue)), "+")
> > For intCounter = LBound(aryCSVValues) To UBound(aryCSVValues)
> > rng.Value = aryCSVValues(intCounter)
> > Set rng = rng.Offset(0, 1)
> > Next intCounter
> >End Sub

> ....

Dana DeLouis

unread,
Jan 4, 2006, 4:58:42 PM1/4/06
to

Hi Harlan. I love your "FindSum" program. It's excellent! Just for
feedback, in a permutation timing program that I have, I was coming up 1
number larger in the total number of solutions. Tracing the program back,
it appears to me that if the list is sorted, then the program misses the sum
of the first 'n' items. For example, if the op's data were sorted, then it
would miss finding the sum of the first two items (207.70+240.16 = 447.86)

A more simplier test might be with the number sequence 1,2,3...10. A
search for 3 might miss 1+2, or a search of 6 might miss 1+2+3.
Again, only if the data is sorted. I'm not sure at this point where in the
program to make a recommendation. Excellent code though. :>)

--
Dana DeLouis
Win XP & Office 2003


"Harlan Grove" <hrl...@aol.com> wrote in message
news:1136402611.2...@g43g2000cwa.googlegroups.com...

Ron Coderre

unread,
Jan 4, 2006, 8:55:44 PM1/4/06
to
Just for the record, Harlan, I wholeheartedly agree with everything you et
al have mentioned regarding cross-matching details to totals. These
scenarios rarely have an elegant solution....having been there and done that
during the 12 years I spent as a financial/accounting manager. I never once
considered Solver more than a shot-in-the-dark approach to try first, just
in case. The basic problem is huge! After all, it took someone with your
intellectual horsepower to finally come up with code that has a reasonable
shot at dealing with the issue.

Unfortunately, the best defense is to try to do everything feasible to avoid
the situation and hope the worst case never happens.

Regards,
Ron

"Harlan Grove" <hrl...@aol.com> wrote in message

news:1136400789....@g49g2000cwa.googlegroups.com...

dvp...@gmail.com

unread,
Jan 4, 2006, 11:40:35 PM1/4/06
to
Wow, thank you so very much for all the responses. I've gone blind
looking at these amounts over the past few days so I really appreciate
the responses. First off, amongst some of my accountant co workers I
know alot about excel but the VBE stuff is a bit shady for me. I've
done some macros but the code Mr. Thomlinson provided is a bit out of
my league. I'd need a more thorough explanation as to how to set up
the code for me to make that work. I pasted it into VBE and turned on
those options but I don't know what to do thereafter. I also want to
try out the solver option but I need to have it installed. I'll have
to try it at work tomorrow morning, man I really didn't expect all
these responses this quickly, guess it helps posting in more than one
group.

For the record it seems that a few of the invoice amounts were missing
from my list hence the huge problem with matching them up to payments.
Even with that i still have some matching issues. I also forgot to
mention that an invoice amount once used when matched to a payment
cannot be used again. The combinations of course must match up to the
payments to the penny.

Again I really would like to try the VBE FindSum program but I'll need
some newbie introduction into how to write a code like that and then
how to use it. Thanks again!

Dza the accountant

Niek Otten

unread,
Jan 5, 2006, 3:26:08 AM1/5/06
to
Look here:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

--
Kind regards,

Niek Otten

<dvp...@gmail.com> wrote in message
news:1136436035.2...@g43g2000cwa.googlegroups.com...

BrianP

unread,
Jan 6, 2006, 11:25:45 AM1/6/06
to
If your list only has up to 9 values, the following worksheet functions
will do the trick.

1. In range A1:A9 enter the list of amounts

2. Enter you're the figure you need to reconcile in A11

3. In the range of cells A15:I525,
enter the formula "=VALUE(MID(DEC2BIN(ROW()-14,9),COLUMN(),1))"

4. In the range J15:J525,
enter the array formula "{=MMULT(A15:I525,A1:A9)}"

5. In the range B1:B9,
enter the formula "=OFFSET($A$14,MATCH($A$11,$J$15:$J$525,0),ROW()-1)"

Amounts that reconcile to the figure in A11 will have a 1 next to them
in column B

0 new messages