Today we'll take a close look at the syntax and typical uses of the new dynamic array SORTBY function. You will learn how to custom sort in Excel with a formula, randomly sort a list, arrange cells by text length, and more.
Microsoft Excel provides a number of ways to arrange text data alphabetically, dates chronologically, and numbers from smallest to largest or from highest to lowest. There is also a way to sort by your own custom lists. In addition to the conventional Sort functionality, Excel 365 introduces a brand-new way to sort data with formulas - very convenient and incredibly simple to use!
The SORTBY function in Excel is designed to sort one range or array based on the values in another range or array. Sorting can be done by one or multiple columns.
SORTBY is one of six new dynamic array functions available in Excel for Microsoft 365 and Excel 2021. Its result is a dynamic array that spills to neighboring cells and updates automatically when the source data changes.
The SORTBY function has a variable number of arguments - the first two are required and the other are optional:
Array (required) - the range of cells or array of values to be sorted.
By_array1 (required) - the range or array to sort by.
Sort_order1 (optional) - the sorting order:
By_array2 / Sort_order2, … (optional) - additional array / order pairs to use for sorting.
Important note! Currently the SORTBY function is only available with Microsoft 365 subscriptions and Excel 2021. In Excel 2019, Excel 2016 and earlier versions the SORTBY function is not available.
For an Excel SORTBY formula to work correctly, there are a few important points to take notice of:
Here's a typical scenario of using a SORTBY formula in Excel:
Supposing, you have a list of projects with the Value field. You want to sort the projects by their value on a separate sheet. As other users do not need to see the numbers, you'd rather not include the Value column in the results.
The task can be easily accomplished with the SORTBY function, for which you supply the following arguments:
Putting the arguments together, we get this formula:
=SORTBY(A2:B10, B2:B10, -1)
For simplicity, we use the formula on the same sheet - enter it in D2 and press the Enter key. The results "spill" automatically to as many cells as needed (D2:D10 in our case). But technically, the formula is only in the first cell, and deleting it from D2 will delete all the results.
When used on another sheet, the formula takes the following shape:
=SORTBY(Sheet1!A2:A10, Sheet1!B2:B10, -1)
Where Sheet1 is the worksheet containing the original data.
Below you will find a few more examples of using SORTBY, which will hopefully prove useful and insightful.
The basic formula discussed above sorts data by one column. But what if you need to add one more level of sorting?
Assuming our sample table has two fields, Status (column B) and Value (column C), we wish to sort first by Status alphabetically, and then by Value descending.
To sort by two columns, we just add one more pair of the by_array / sort_order arguments:
As the result, we get the following formula:
=SORTBY(A2:B10, B2:B10, 1, C2:C10, -1)
Which rearranges our data exactly as we instructed it:
To sort data in a custom order, you can either use Excel's Custom Sort feature or build a SORTBY MATCH formula in this way:
Taking a closer look at our data set, you will probably find it more convenient to sort the projects by their status "logically", e.g. by importance, rather than alphabetically.
To have it done, we first create a custom list in the desired sort order (In progress, Completed, On hold) typing each value in a separate cell in the range E2:E4.
And then, using the generic formula above, we supply the source range for array (A2:C10), the Status column for range_to_sort (B2:B10), and the custom list that we created for custom_list (E2:E4).
=SORTBY(A2:C10, MATCH(B2:B10, E2:E4, 0))
As the result, we've got the projects sorted by their status exactly as needed:
To sort by custom list in the reverse order, put -1 for the sort_order1 argument:
=SORTBY(A2:C10, MATCH(B2:B10, E2:E4, 0), -1)
And you'll have the projects sorted in the opposite direction:
Want to additionally sort records within each status? No problem. Simply, add one more sort level to the formula, say by Value (C2:C10), and define the desired order of sorting, ascending in our case:
=SORTBY(A2:C10, MATCH(B2:B10, E2:E5, 0), 1, C2:C10, 1)
A big advantage of the SORTBY formula over Excel's Custom Sort feature is that the formula updates automatically whenever the original data changes, while the feature requires cleaning up and re-sorting with each change.
How this formula works:
As already mentioned, Excel's SORTBY function can only process "sort by" arrays whose dimensions are compatible with the source array. As our source array (C2:C10) contains 9 rows and the custom list (E2:E4) only 3 rows, we cannot supply it directly to the by_array argument. Instead, we use the MATCH function to create a 9-row array:
MATCH(B2:B10, E2:E5, 0)
Here, we use the Status column (B2:B10) as lookup values and our custom list (E2:E5) as lookup array. The last argument is set to 0 to look for exact matches. As the result, we get an array of 9 numbers, each representing the relative position of a given Status value in the custom list:
This array goes directly to the by_array argument of the SORTBY function and forces it to place the data in the order corresponding to the elements of the array, i.e. first entries represented by 1's, then entries represented by 2's, and so on.
In new Excel, you can use a more powerful RANDARRAY function together with SORTBY:
Where array is the source data that you want to shuffle.
This generic formula works for a list consisting of a single column as well as for a multi-column range.
For example, to randomly sort a list in A2:A10, use this formula:
To shuffle data in A2:C10 keeping the rows together, use this one:
How this formula works:
The RANDARRAY function produces an array of random numbers to be used for sorting, and you pass it in the by_array argument of SORTBY. To specify how many random numbers to generate, you count the number of rows in the source range by using the ROWS function, and "feed" that number to the rows argument of RANDARRAY. That's it!
Note. Like its predecessor, RANDARRAY is a volatile function and it generates a new array of random numbers every time the worksheet is recalculated. As the result, your data will be resorted with each change on the sheet. To prevent auto resorting, you can use the Paste Special > Values feature to replace formulas with their values.
To sort cells by the length of text strings they contain, use the LEN function to count the number of characters in each cell, and supply the calculated lengths to the by_array argument of SORTBY. The sort_order argument can be set to either 1 or -1, depending on the preferred order of sorting.
To sort by text string from smallest to largest:
To sort by text string from largest to smallest:
And here's a formula that demonstrates this approach on real data:
=SORTBY(A2:A7, LEN(A2:A7), 1)
Where A2:A7 are the original cells you'd like to sort by text length in ascending order:
In the group of new Excel dynamic array functions, there are two designed for sorting. Below we list the most essential differences and similarities as well as when each is best to be used.
In case your SORTBY formula returns an error, it's most likely because of one of the following reasons.
The by_array arguments must be a single row or a single column and compatible in size with the array argument. For example, if array has 10 rows, by_array should also include 10 rows. Otherwise a #VALUE! error occurs.
The sort_order arguments can only be 1 (ascending) or -1 (descending). If no value is set, SORTBY defaults to ascending order. If any other value is set, a #VALUE! error is returned.
Like any other dynamic array function, SORTBY spills the results into an automatically resizable and updatable range. If there are not enough empty cells to display all values, a #SPILL! error is thrown.
If a SORTBY formula references another Excel file, both workbooks need to be open. If the source workbook is closed, a #REF! error occurs.
When used in a pre-dynamic version of Excel, the SORT function returns a #NAME? error.
That's how to use the SORTBY function in Excel to do custom sort and other things. I thank you for reading and hope to see you on our blog next week!
Excel SORTBY formulas (.xlsx file)
Table of contents