Please Note: This article is written for users of the following Microsoft Excel versions: 97, 2000, 2002, and 2003. If you are using a later version (Excel 2007 or later), this tip may not work for you. For a version of this tip written specifically for later versions of Excel, click here: Determining Combinations to Make a Total.

# Determining Combinations to Make a Total

by Allen Wyatt
(last updated October 27, 2012)

Suppose you have a worksheet with three columns of data. The first column has in sequential order each letter of the alphabet, A through Z. The second column contains a number of occurrences that correlates with the letter in the alphabet. The third column contains a number of hours that correlates with the letter in the alphabet.

What if you want to distribute, as evenly as possible, a combination of the alphabet letters into four groups based on the third column (hours)? For example, if the sum of all the hours for each letter of the alphabet is 4,000 hours, you want to come up with a combination that would segregate the alphabet so that each one of the four groups would have around 1,000 hours per group.

This is actually a well-known problem in the field of discrete mathematics. A variety of algorithms have been developed to provide solutions, and there are certain programming languages (such as LISP) that greatly facilitate creating tree structures that can "search" for optimal solutions.

In this case, however, a simple approach is best, and that involves using a macro. Let's assume that you have your data in columns A through C. The following macro will analyze the range you specify and return a combination of values that fulfill your requirements.

```Function DoDist(sRaw As Range, _
iTCol As Integer, _
iBuckets As Integer, _
iWanted As Integer, _
iRetCol As Integer) As String

Dim lGTotal As Long
Dim lPerBucket As Long
Dim lCells() As Long
Dim sRet() As String
Dim lBk() As Long
Dim sBk() As String
Dim lTemp As Long
Dim sTemp As String
Dim J As Integer
Dim K As Integer
Dim L As Integer

Application.Volatile
ReDim lCells(sRaw.Rows.Count)
ReDim sRet(sRaw.Rows.Count)
ReDim lBk(iBuckets)
ReDim sBk(iBuckets)

lGTotal = 0
For J = 1 To sRaw.Rows.Count
lCells(J) = sRaw(J, iTCol)
lGTotal = lGTotal + lCells(J)
sRet(J) = sRaw(J, iRetCol)
Next J

For J = 1 To sRaw.Rows.Count - 1
For K = J + 1 To sRaw.Rows.Count
If lCells(J) < lCells(K) Then
lTemp = lCells(J)
lCells(J) = lCells(K)
lCells(K) = lTemp
sTemp = sRet(J)
sRet(J) = sRet(K)
sRet(K) = sTemp
End If
Next K
Next J

lPerBucket = lGTotal / iBuckets
For J = 1 To sRaw.Rows.Count
L = iBuckets
For K = iBuckets To 1 Step -1
If lBk(K) <= lBk(L) Then L = K
Next K
lBk(L) = lBk(L) + lCells(J)
sBk(L) = sBk(L) & sRet(J) & ", "
Next J

For J = 1 To iBuckets
If Right(sBk(J), 2) = ", " Then
sBk(J) = Left(sBk(J), Len(sBk(J)) - 2)
End If
sBk(J) = sBk(J) & " (" & lBk(J) & ")"
Next J

DoDist = sBk(iWanted)
End Function
```

Notice that this function is passed five parameters. The first is the range that you want evaluated, the second is the offset of the column within that range that should be totaled, the third is the number of "buckets" you want to use in the evaluation, the fourth is the number of the bucket that you want to return, and the fifth is the offset of the column (in the specified range) that contains the values you want returned.

What the macro does is to grab all the values in the column you want totaled, and then sort them in descending order. These values, from largest to smallest, are then distributed among however many "buckets" you specified that there should be. The number is always added to the bucket that contains the smallest total. The string that is returned by the function represents the return values (whatever is in each cell of the column specified by the fifth parameter) and the total of the bucket.

For instance, if you wanted to evaluate the range A1:C:26, you wanted the distribution to be based on the values in the third column of the range (column C), you wanted there to be four buckets in the analysis, you wanted the third bucket returned, and you wanted to have the function return whatever is in column A of the range, then you would use the following to call the function:

```=DoDist(A1:C26,3,4,3,1)
```

ExcelTips is your source for cost-effective Microsoft Excel training. This tip (2408) applies to Microsoft Excel 97, 2000, 2002, and 2003. You can find a version of this tip for the ribbon interface of Excel (Excel 2007 and later) here: Determining Combinations to Make a Total.

##### Author Bio

Allen Wyatt

With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He  is president of Sharon Parq Associates, a computer and publishing services company. ...

##### MORE FROM ALLEN

After Pressing Enter, Text Becomes a Heading

Word provides several built-in tools that can affect how what you type is formatted. One of those tools can even change your ...

Discover More

Making Your Formulas Check for Errors

Want to use a formula to check if there is an error in your formula? (Sounds confusing, but it's not that bad.) You'll love ...

Discover More

First and Last Names in a Page Header

When you have a worksheet that includes a long list of names, you may want the first and last names on each page to appear in ...

Discover More

Solve Real Business Problems Master business modeling and analysis techniques with Excel and transform data into bottom-line results. This hands-on, scenario-focused guide shows you how to use the latest Excel tools to integrate data from multiple tables. Check out Microsoft Excel 2013 Data Analysis and Business Modeling today!

Sorting by Fill Color

Sorting data in a worksheet is easy, unless you want to sort by the color used to fill a range of cells. There are ways to do ...

Discover More

Generating Unique Sequential Numbers

Using Excel to generate unique sequential numbers for invoices or company statements can be a challenge. Here's information ...

Discover More

Counting Colors of Cells

Many people use colors of cells as a common method of communicating information in a worksheet. If you need a way to count ...

Discover More
##### Subscribe

FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."

If you would like to add an image to your comment (not an avatar, but an image to help in making the point of your comment), include the characters [{fig}] in your comment text. Youâ€™ll be prompted to upload your image when you submit the comment. Images larger than 600px wide or 1000px tall will be reduced. Up to three images may be included in a comment. All images are subject to review. Commenting privileges may be curtailed if inappropriate images are posted.

What is three more than 8?

2016-12-03 06:08:03

Hi, great discuss buy can you help with an excel data example so that I can get the illustration well.

Thank you

2013-02-10 17:44:00

Sebastian

Ok, I'm really new to this... Do I copy this into a module in a spreadsheet?

##### This Site

Got a version of Excel that uses the menu interface (Excel 97, Excel 2000, Excel 2002, or Excel 2003)? This site is for you! If you use a later version of Excel, visit our ExcelTips site focusing on the ribbon interface.