В Excel давно предусмотрена возможность объединения соседних ячеек в более крупную отдельную ячейку. Эту способность использовали многие дизайнеры рабочих листов, чтобы придать своим рабочим листам безупречный профессиональный вид.

Однако у использования объединенных ячеек есть огромный недостаток: вы не можете сортировать таблицы, которые их включают. Если вы попытаетесь, вы получите сообщение: «Для операции требуется, чтобы объединенные ячейки имели одинаковый размер».

Наиболее очевидное решение проблемы — не использовать объединенные ячейки.

Предположим, например, что у вас есть рабочий лист, в котором каждая «запись» фактически состоит из двух строк, и что первый столбец рабочего листа содержит объединенные ячейки. (Каждая двухстрочная запись начинается с двух объединенных ячеек, охватывающих две строки. Эта объединенная ячейка содержит имя проекта.)

Лучше разделить ячейки в первом столбце, но тогда вы можете задаться вопросом, как правильно отсортировать записи на листе; как сохранить пары строк вместе во время сортировки. Вы можете сделать это, поместив название вашего проекта в первую строку, а имя проекта, добавив «zz» во второй строке. Например, если первая строка содержит «Wilburn Chemical» (название проекта), то вторая строка может содержать «Wilburn Chemicalzz». Отформатируйте ячейку второй строки, чтобы имя не отображалось (например, белый текст на белом фоне), и затем вы можете успешно отсортировать, как хотите.

Другое решение — использовать макрос, чтобы манипулировать вашим листом и выполнить сортировку. Предполагая, что объединенные ячейки находятся в столбце A (как описано ранее), вы можете использовать следующий макрос для сортировки данных по содержимому столбца A:

Sub SortList()

Dim sAddStart As String     Dim rng As Range     Dim rng2 As Range     Dim lRows As Long

Application.ScreenUpdating = False     sAddStart = Selection.Address     Set rng = Range("A1").CurrentRegion

With rng         lRows = .Rows.Count - 1         .Cells(1).EntireColumn.Insert         .Cells(1).Offset(0, -1) = "Temp"

.Cells(1).Offset(1, -1).FormulaR1C1 = _           "=+RC[1]&"" ""&ROW()"

.Cells(1).Offset(2, -1).FormulaR1C1 = _           "=+R[-1]C[1]&"" ""&ROW()"

Set rng2 = .Cells(1).Offset(1, -1).Resize(lRows, 1)

Range(.Cells(2, 0), .Cells(3, 0)).AutoFill _             Destination:=rng2         rng2.Copy         rng2.PasteSpecial Paste:=xlValues

.Columns(1).MergeCells = False

.CurrentRegion.Sort _         Key1:=Range("A2"), Order1:=xlAscending, _         Header:=xlYes, OrderCustom:=1, _         MatchCase:=False, Orientation:=xlTopToBottom

rng2.EntireColumn.Delete

With Range(.Cells(2, 1), .Cells(3, 1))

.Merge             .Copy             .Cells(3, 1).Resize(lRows - 2, 1). _                 PasteSpecial Paste:=xlFormats         End With     End With     Application.CutCopyMode = False     Range(sAddStart).Select     Application.ScreenUpdating = True End Sub

Макрос вставляет временный столбец, считывает элементы из первого столбца списка, добавляет номер строки, копирует его во временный столбец, извлекает ячейки, сортирует список, удаляет временный столбец и повторно объединяет столбец A. (Это большая работа, чтобы просто отсортировать таблицу с объединенными ячейками!)

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

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

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

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

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

Этот совет (761) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Sorting_Data_Contain_Merged_Cells [Сортировка данных, содержащих объединенные ячейки].