Finding combinations of cells that sum to near a value

Starting with a column of ~30 numbers, I'm looking for a way to have
Excel find all combinations that sum to a target value +/- a specified
range width. (For example, I may be looking for all combinations that
sum to 1000 +/- 10.)

I've found some code from Tushar Mehta that finds a list of all
possible matches that sum to a number, but it doesn't allow me to put
in a range to find sums to within a delta of this value. I tried
modifying the code to add this in, but I couldn't get it to work
right. Here is the code: http://www.tushar-mehta.com/excel/templates/match_values/index.html

Does anyone have any suggestions?

Thank you,
Laura
0
lbnorin (2)
6/30/2009 8:32:40 PM
excel 39879 articles. 2 followers. Follow

1 Replies
1135 Views

Similar Articles

[PageSpeed] 59

Clarification: I did get the code to almost work, but when I put in a
range (labeled Diff in the code) it no longer returns all possible
combinations, only some of them. Here's the code:


Sub Combinations()
Option Explicit
 Function RealEqual(A, B, C)
    RealEqual = Abs(A - B) <= C
    End Function
Function ExtendRslt(CurrRslt, NewVal, Separator)
    If CurrRslt = "" Then ExtendRslt = NewVal _
    Else ExtendRslt = CurrRslt & Separator & NewVal
    End Function
Sub recursiveMatch(ByVal MaxSoln As Integer, ByVal TargetVal, InArr(),
_
        ByVal CurrIdx As Integer, _
        ByVal CurrTotal, ByVal Diff As Double, _
        ByRef Rslt(), ByVal CurrRslt As String, ByVal Separator As
String)
    Dim I As Integer
    For I = CurrIdx To UBound(InArr)
        If RealEqual(CurrTotal + InArr(I), TargetVal, Diff) Then
            Rslt(UBound(Rslt)) = ExtendRslt(CurrRslt, I, Separator)
            If MaxSoln = 0 Then
                If UBound(Rslt) Mod 100 = 0 Then Debug.Print UBound
(Rslt) & "=" & Rslt(UBound(Rslt))
            Else
                If UBound(Rslt) >= MaxSoln Then Exit Sub
                End If
            ReDim Preserve Rslt(UBound(Rslt) + 1)
        ElseIf CurrTotal + InArr(I) > TargetVal + Diff Then
        ElseIf CurrIdx < UBound(InArr) Then
            recursiveMatch MaxSoln, TargetVal, InArr(), I + 1, _
                CurrTotal + InArr(I), Diff, Rslt(), _
                ExtendRslt(CurrRslt, I, Separator), _
                Separator
            If MaxSoln <> 0 Then If UBound(Rslt) >= MaxSoln Then Exit
Sub
        Else
            'we've run out of possible elements and we _
             still don't have a match
            End If
        Next I
    End Sub
Function ArrLen(Arr()) As Integer
    On Error Resume Next
    ArrLen = UBound(Arr) - LBound(Arr) + 1
    End Function
Sub startSearch()
    'The selection should be a single contiguous range in a single
column. _
     The first cell indicates the number of solutions wanted.  Specify
zero for all. _
      The 2nd cell is the target value. _
      The 3rd cell sets the range around the target value. _
      The rest of the cells are the values available for matching. _
      The output is in the column adjacent to the one containing the
input data.
    Dim TargetVal, Rslt(), InArr(), StartTime As Date, MaxSoln As
Integer, Diff As Double
    MaxSoln = Selection.Cells(1).Value
    TargetVal = Selection.Cells(2).Value
    Diff = Selection.Cells(3).Value
    InArr = Application.WorksheetFunction.Transpose( _
        Selection.Offset(3, 0).Resize(Selection.Rows.Count - 3).Value)
    ReDim Rslt(0)
    recursiveMatch MaxSoln, TargetVal, InArr, LBound(InArr), 0, Diff,
_
        Rslt, "", ", "
    Selection.Offset(0, 1).Resize(ArrLen(Rslt), 1).Value = _
        Application.WorksheetFunction.Transpose(Rslt)
    End Sub
0
lbnorin (2)
6/30/2009 8:57:48 PM
Reply:

Similar Artilces:

I need to compare 3 numbers and find the one in the middle
I have three numbers in a single row and would like to identify the middle number enter that number in another cell. Example: 1st # 2nd # 3rd # result 628 678 720 678 655 625 700 655 748 720 725 725 is there a function in excel that can do this? Thanks, Eddie Try =LARGE(A1:C1,2) VBA Noo -- VBA Noo ----------------------------------------------------------------------- VBA Noob's Profile: http://www.excelforum.com/member.php?action=getinfo&userid=3383 View this thread: http://www.excelforum.com/showthread.php?threadid=56811 fasteddie wrote.....

Find Duplicate names and delate
Dear experts, I have a small doubt could you clarify that??? That is I find duplicate name but I want to delete one name only, if I filter DUPLICATE….. both names are showing… 1. Select the range of data including the header. You need to have headers for these columns 2. From menu Data>Filter>Advanced Filter>Copy to another location 3. In 'copy to' specify the target cell and check 'Unique records only' 4. Click OK will give you the unique list -- Jacob "Find Duplicate names and delate" wrote: > Dear experts, > I have a small ...

Finding a Median
I'm trying to write a query that will return a median for various values taken from a previous query. I've seen some suggestions in my searching, but I haven't been able to get them working. They are also all from before 2003 and refer to Access 97 and 2000. Has any functionality been added to 2003 for this? Or is there a non- code-based way to do it? I've seen it suggested to write a code to open the query, sort it, find the total number of records, divide it in half, then seek out the middle record using that value. I'm still very green when it comes to code, though...

Find a Value the first Time It Occurs
I have a row of values that shows the total cumulative number of sales of items by month. Occasionally, there may be no sales in a month for an item so the cumulative value would stay the same for more than one month. I want to select a number in the row the first time it occurs and not select it if it repeats. What are you wanting to do with the info? To return position (column number) of number 1234 within row 2: =MATCH(1234,2:2,0) A formula that signals it's the first occurence: =COUNTIF($A2:A2,A2)=1 This could be used in a helper row, or as a conditional format f...

delete drop-down box in cell
I have a problem removing a drop-down list box in a cell and have trie using clear contents, delete cell, the delete button on the keyboard Can someone please tell me how to remove this box from the cell. Thank -- Message posted from http://www.ExcelForum.com Hi might be one created by data / validation ... click on the cell choose data / validation choose Clear All regards JulieD "brain77 >" <<brain77.1apguz@excelforum-nospam.com> wrote in message news:brain77.1apguz@excelforum-nospam.com... > I have a problem removing a drop-down list box in a cell and have tr...

Adding letters =sum(a1:a10,"T") ?
I have a column of letters T or F representing true or false. I would like to check through this column and count the number of Ts and/or the number of F's and I'm having problems doing so. I've used the count function - no luck with my structure. Thanks Andrew You want to use: =COUNTIF(A1:A10,"T") and/or =COUNTIF(A1:A10,"F") "AndrewWent" <andrewwent@aol.com> wrote in message news:20041105191124.21692.00000144@mb-m14.aol.com... > > I have a column of letters T or F representing true or false. I would like to > check through this...

VBA to insert .xlborder if cell value not equal to previous cell
I've got a worksheet and I'm wondering whether it is possible to insert a line when a value in Column A, B, C & D does not equal the values in the row above or below it. I've currently got a formula in Column A that reads.... =IF(AND(B3=B2,C3=C2,D3=D2,E3=E2),"","IL") and a conditional format that if the cell value is equal to "IL" then put a border. Wondering if there is a better way to do this via VBA or is that the better way? In your conditional formatting formula, instead of =A1="IL" (which I assume is what you've...

How can I combine data from a list?
For example: suppose I had a very simple list, with two columns: "Name" and "Number". The category "name" has three items: Dog, Cat, and Dog. Each of those three items has a corresponding "number" value: 3, 4, and 5. I'm trying to find a function that would recognize the fact that I have "Dog" listed twice, and would sum the 3 & 5 values listed next to each "Dog", leaving me with a two-item list: Dog, 8 & Cat, 4. Is there a way to do this? A Pivot Table will do that nicely for you: Set the Name as a ROW and the ...

Find/Replace in RichEdit 2.0
I'm using Windows ME and I've switched from RichEdit 1.0 to 2.0 for my CRichEditDoc/View application so that I can use the ITextDocument interface and can do things such as suspend/resume the Redo buffer. Problem is, now the Find/Replace dialogs don't seem to do anything. If I revert back to RichEdit 1.0 they do! What's going on? BUMP! adriangibbons@yahoo.co.uk (Adrian Gibbons) wrote in message news:<34a2acd5.0404130713.123dbaab@posting.google.com>... > I'm using Windows ME and I've switched from RichEdit 1.0 to 2.0 for my > CRichEditDoc/View application...

vlookup on cell below
Is it possible to do a VLOOKUP but instead of returning the value in row that contains the lookup, it returns the value in the row below? eg a b 1 no x 2 yes y 3 ok z =VLOOKUP("yes",A1:B3,2,FALSE) would return "z" instead of "y". Th only way I can think of is to add a row header at the top and use the MATCH function in column A to find the row position of "yes", then use that in an HLOOKUP in column B. I was hoping there was a simpler way. Not VLOOKUP, but INDEX & MATCH =INDEX(B1:B3,MATCH("yes",A1:A3,0)) -...

Find (but not find)
My program takes a name from sheet3 goes to sheet1 to Find the name. If it cannot find name, how do you do an If/End to Exit Do while or find out if name has been founf? I have "On Error Resume Next" in program. Thanks again for all your help Gordon As ALWAYS, post your code for comments & suggestions. -- Don Guillett Microsoft MVP Excel SalesAid Software dguillett1@austin.rr.com "Gordon" <gwelch1938@yahoo.com> wrote in message news:1184612089.486737.144020@n60g2000hse.googlegroups.com... > My program takes a name from sheet3 goes to sheet1 to Find the na...

Return "cell reference"
Hi. How to do the following: 1) Return the cell reference of the cell eg: Type this formula in cell A1: =return_cell_reference_of_that_cell() {The above is a fictitious formula only} The answer will be A1. Preferably, it is great for me to decide on how the reference is displayed, eg: - absolute (ie $A$1) or - column-absolute (ie $A1) or - row-absolute (ie A$1) - relative (ie A1) 2) Return cell reference(s) of the target eg: Type this formula in cell B1: =return_cell_reference(target_cell) {The above is a fictitious formula only} eg: =return_cell_reference(A3) Answer: A3 =return_cell_refe...

is there a comand to return the mane of a worksheet inside a cell
Trying to find a command that returns a worksheet name inside a cell Hi Fabian Try this, =MID(CELL("filename"),FIND("[",CELL("filename"))+1,FIND("]",CELL("filename"))-FIND("[",CELL("filename"))-1) This one will give you the full path: =CELL("filename") HTH John "Fabian" <Fabian@discussions.microsoft.com> wrote in message news:140C847D-2C3A-49F6-9C60-9515B426AD5E@microsoft.com... > Trying to find a command that returns a worksheet name inside a cell Hi, =MID(CELL("filename...

Finding an event
Hello, I am developing an app that uses a single worksheet to enter data. When user double clicks a button, a new window (in same workbook) opens with a new sheet. My problem is that excel does not seem to have any events for close of window if there are multiple windows in a workbook. Can someone help Peter Peter, That triggers the Workbook_WindowActivate event, you can use that. HTH Bob "Peter Ostermann" wrote in message news:i9m5v8$7bv$02$1@news.t-online.com... Hello, I am developing an app that uses a single worksheet to enter data. When user double clicks a button...

Microsoft Money 2004
I just upgraded from Money 2002 to Money 2004. Can somebody please explain why I just paid AUD$80 for THE SAME SOFTWARE? Very, very disapointed. What information did you rely on to set your value expectation level that M04 was way different, indeed AUD$80 better, than M02? That might help explain it better than we can. "Paul Ward" <pbward@hotmail.com> wrote in message news:04b401c35bb8$b9fea7d0$a501280a@phx.gbl... > I just upgraded from Money 2002 to Money 2004. Can > somebody please explain why I just paid AUD$80 for THE > SAME SOFTWARE? > > Very, very disa...

Find value in a column and insert rows above
The set up looks like this: ColU ColV ColW ColX Y N N N Y N N N N Y N N N N Y N N N Y N N N Y N N N Y N N N Y Y Columns will always be U through X and will always be sorted in this order. I need to find the first Y in each column and insert 2 rows above that row. On the blank row above the first Y, I need to highlight in yellow and put title in the first cell, such as New, Old, Existing, Deleted. Any help would be greatly appreciated. Thanks for your time, Dee If desired, send your file to my address below. I will only look if: 1. You send a copy of this ...

cannot find database
I have an excel spreadsheet that is supposed to update a access db. Whenever I try to save the .xls I get an error stating cannot find db. Even when I open the db with access, I get the error and the db opens anyway?????? This only happens on 2 out of 20 pc's and I cannot figure out why???????? Thanks ...

Simple division is not returning actual value
Hi, I know I'm making a mistake somewhere, just not sure where. I'm dividing 67/14 and want to get the result as 4.78 -- I'd be OK with 4.79 which is the result I'd get if the last digit was rounded up. When I do SELECT CAST((67/14) AS DECIMAL(3,2)) I'm getting 4.00. What am I doing wrong? -- Thanks, Sam This is because of integer division. Try this: SELECT 67/CAST(14 AS DECIMAL(5,2)) AS a, 67/14.0 AS b, 1.0 * 67/14 AS c, CAST(1.0 * 67/14 AS DECIMAL(3, 2)) AS d, ROUND(1.0 * 67/14, 2, 1) AS e; /* a b...

Sum if Condition is Equal in Range Date and find column
I want to make a sum if Range is a week number and if style is Equal to CONC-92 or CONC-45 Week# 49 Week# 50 CONC-92= 27 CONC-92= 30 CONC-45= 27 CONC-45= 30 Datas are in a pivot table and... Pivot table looks like this: Date CONC-92 CONC-45 CONC-92 CONC-45 12/7 5 5 10 10 12/8 2 2 10 10 12/9 5 5 10 10 12/10 5 5 10 10 please help -- Lorenzo Díaz Cad Technician ...

Losing cell borders when I copy and paste
When I copy and paste into a blank cell my borders from the cell dissapear. What am I doing wrong? Are you copying a bordered cell onto an un-bordered cell? Format from source will go with the source. If copying an unbordered cell onto a blank bordered cell, source format will wipe the target cell format. Gord Dibben MS Excel MVP On Sat, 19 Apr 2008 15:47:00 -0700, Davo <Davo@discussions.microsoft.com> wrote: >When I copy and paste into a blank cell my borders from the cell dissapear. >What am I doing wrong? Try paste special -> Values. -- HTH, Barb Reinhardt &qu...

Requesting Help Ranking Sales Values.....
I have a field in a table named "Ext B/O" that lists the extended Backorder Value for parts sold. There may be duplicate values and they should show the same rankings. I would like to rank these totals from highest to lowest dollar value. I have tried the following query coding but I only get a count of the total number of records in the query for each record (49435) and NOT the individual ranking of the value. Rank: (Select Count(*) from [tbl_WorkingData] Where [Ext B/O] >= 0)+1 Can ANYONE please tell me what I am doing wrong and how to correct it? Th...

Can I place visible text in cell that won't print
Is it possible for me to place text in some cells where I can see the text but that will not print when my sheet is printed. I am aware of the comment feature that becomes visible when the mouse hovers over the small red symbol. I would like to be able to see what is in the cell without having to hover the mouse over each cell to see a comment. Is this possible? Thank you for any direction here. Jerry There are a few possible solutions. One is to use the comment as you noted, but you can have them always display even without the mouse hovering over it by using Tools/Options/View and se...

Trapping a NO FIND after a find
I use the code below to store a row number to a variable after a find. I would like to trap a NO FIND if the find is unsuccessfull Any ideas. FSt1 provided the code below Sub macfindrow() dim rn as string dim rng as range dim therow as long rn = inputbox("enter something to find") if rn <> "" then Set rng = nothing Set rng = range("A1:IV65536").Find(what:=rn, _ After:=Range("A1"), _ Lookin:=xlformulas, _ Lookat:=xlpart, _ ...

ignoring text data in a cell when summing values in the same cell
I have entered text in cells along with a numerical value as a note pertainig to the values example, "2 - exist". Is there a way to tell Excell to ignore the text data in order to sum the values..do you place the text in brackets or parathesis or something similar? -- FM Much, much easier never to mix text & numbers in the same cell in the 1st place. One avenue here, try use Data>Text to Columns to split the numbers separate from the text, then you can sum (or whatever) the numbers col directly. Or, assuming your data is representative (ie numbers are to the...

How do I find the out of office reply?
My out of office reply is missing from tools. How can I retrieve it? Out of Office reply <Out of Office reply@discussions.microsoft.com> wrote: > My out of office reply is missing from tools. How can I retrieve it? Unless you are using an Exchange server, you will not have the Out of Office Assistant. See this: http://www.slipstick.com/rules/autoreply.htm -- Brian Tillman ...