# Partition function

Returns a **Variant** (**String**) indicating where a number occurs within a calculated series of ranges.

## Syntax

**Partition**(*number*, *start*, *stop*, *interval*)

The **Partition** function syntax has these named arguments:

Part | Description |
---|---|

number |
Required. The number that you want to evaluate against the ranges. |

start |
Required. The number that is the start of the overall range of numbers. The number can't be less than 0. |

stop |
Required. The number that is the end of the overall range of numbers. The number can't be equal to or less than start. |

interval |
Required. The number that is the difference between one range and the next. The number can't be less than 1. |

## Remarks

The **Partition** function identifies the particular range in which *number* falls and returns a **Variant** (**String**) describing that range. The **Partition** function is most useful in queries. You can create a select query that shows how many orders fall within various ranges, for example, order values from 1 to 1000, 1001 to 2000, and so on.

The following table shows how the ranges are determined using three sets of *start*, *stop*, and *interval* parts. The First Range and Last Range columns show what **Partition** returns. The ranges are represented by *lowervalue*: *uppervalue*, where the low end (*lowervalue*) of the range is separated from the high end (*uppervalue*) of the range with a colon (**:**).

start |
stop |
interval |
Before First | First Range | Last Range | After Last |
---|---|---|---|---|---|---|

0 | 99 | 5 | " :-1" | " 0: 4" | " 95: 99" | " 100: " |

20 | 199 | 10 | " : 19" | " 20: 29" | " 190: 199" | " 200: " |

100 | 1010 | 20 | " : 99" | " 100: 119" | " 1000: 1010" | " 1011: " |

In the table shown previously, the third line shows the result when *start* and *stop* define a set of numbers that can't be evenly divided by *interval*. The last range extends to *stop* (11 numbers) even though *interval* is 20.

If necessary, **Partition** returns a range with enough leading spaces so that there are the same number of characters to the left and right of the colon as there are characters in *stop*, plus one. This ensures that if you use **Partition** with other numbers, the resulting text will be handled properly during any subsequent sort operation.

If *interval* is 1, the range is *number:number*, regardless of the *start* and *stop* arguments. For example, if *interval* is 1, *number* is 100 and *stop* is 1000, **Partition** returns " 100: 100".

Any argument can be a decimal value, but it will be rounded to the nearest even integer before processing.
If any of the arguments is Null, **Partition** returns a **Null**.

## Example

This example assumes that you have an Orders table that contains a Freight field. It creates a select procedure that counts the number of orders for which freight cost falls into each of several ranges. The **Partition** function is used first to establish these ranges, and then the SQL **Count** function counts the number of orders in each range.

In this example, the arguments to the **Partition** function are *start* = 0, *stop* = 500, *interval* = 50. The first range would therefore be 0:49, and so on up to 500.

```
SELECT DISTINCTROW Partition([freight],0, 500, 50) AS Range,
Count(Orders.Freight) AS Count
FROM Orders
GROUP BY Partition([freight],0,500,50);
```

## See also

### Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.