Excel позволяет сортировать данные на листах по любому количеству атрибутов. Однако одна из вещей, по которой вы не можете выполнять сортировку по существу, — это цвет ячеек, по крайней мере, без обновления до Excel 2007 или более поздней версии. Для некоторых приложений это может быть очень удобной функцией.

Следующий макрос, SortByColor, сортирует таблицу по цвету, которым отформатирована ячейка.

Sub SortByColor()

On Error GoTo SortByColor_Err

Dim sRangeAddress As String     Dim sStartCell As String     Dim sEndCell As String     Dim rngSort As Range     Dim rng As Range

Application.ScreenUpdating = False

sStartCell = InputBox("Enter the cell address of the " & _       "top cell in the range to be sorted by color" & _       Chr(13) & "i.e.  'A1'", "Enter Cell Address")



If sStartCell > "" Then         sEndCell = Range(sStartCell).End(xlDown).Address         Range(sStartCell).EntireColumn.Insert         Set rngSort = Range(sStartCell, sEndCell)

For Each rng In rngSort             rng.Value = rng.Offset(0, 1).Interior.ColorIndex         Next         Range(sStartCell).Sort Key1:=Range(sStartCell), _           Order1:=xlAscending, Header:=xlNo, _           Orientation:=xlTopToBottom         Range(sStartCell).EntireColumn.Delete     End If

SortByColor_Exit:

Application.ScreenUpdating = True     Set rngSort = Nothing     Exit Sub

SortByColor_Err:

MsgBox Err.Number & ": " & Err.Description, _       vbOKOnly, "SortByColor"

Resume SortByColor_Exit End Sub

Макрос работает, сначала запрашивая у вас начальную ячейку диапазона, который вы хотите отсортировать. Это должна быть самая верхняя ячейка в диапазоне. Затем макрос вставляет столбец (только временно), в котором могут храниться значения цвета. Затем он проходит по каждой ячейке в диапазоне, заданном вами для начальной ячейки.

SortByColor предполагает, что в вашей таблице данных нет строки заголовка. Если это так, вам следует изменить фактическую команду сортировки. Просто измените Header: = xlNo на Header: = xlYes.

Следует отметить, что макрос SortByColor будет сортировать ячейки только на основе явного цвета, примененного к ячейке, он не будет сортировать, если цвет ячейки является результатом условного форматирования.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (3122) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Sorting_by_Colors [Сортировка по цветам].