Определение критериев сортировки

Предположим, что ваш коллега дает вам рабочий лист, содержащий несколько сотен строк данных в 27 столбцах. Прежде чем вы начнете работать с данными, вы можете узнать, были ли они ранее отсортированы. Знание информации может не только избавить вас от необходимости прибегать к данным, но и даст вам представление о том, что ваш коллега считал наиболее важным способом просмотра данных.

К сожалению, , Excel не имеет встроенного способа определения критериев сортировки, используемых для диапазона данных. Теоретически вы могли бы написать макрос, который проверял бы каждый столбец и смотрел, находится ли он в порядке возрастания или убывания. Это скажет вам, был ли отсортирован этот единственный столбец, но это не обязательно означает, что вся таблица данных была отсортирована по этому столбцу – это может быть просто совпадением, что столбец находится в отсортированном порядке, а сортировка была выполнена каким-то другим столбец. Задача проверки становится еще более сложной, когда вы начинаете рассматривать вторичные и третичные сортировки.

Однако есть одна вещь, которую вы можете попробовать, чтобы определить, отсортирован ли конкретный столбец и отсортирован ли он по возрастанию. или по убыванию. (Помните: это не скажет вам, был ли конкретный столбец основным, используемым для сортировки, он только скажет вам, отсортирован ли столбец.)

Идея макроса состоит в том, чтобы скопировать содержимое столбца на временный рабочий лист два раза. Например, если вы хотите извлечь столбец F, макрос копирует столбец F в столбцы A и B на временном листе. Затем макрос сортирует столбец B в порядке возрастания и сравнивает его со столбцом A. Если отсортированные и несортированные столбцы совпадают, то исходный столбец был в порядке возрастания. Затем столбец B сортируется в порядке убывания и сравнение выполняется снова. Опять же, если столбцы равны, тогда столбец находится в порядке убывания.

Sub TestIfSorted (i) Dim CColumn as Number Dim CSheet as String Dim FlagSort as String ‘Определить текущий столбец и текущий лист CColumn = i CSheet = ActiveSheet.Name FlagSort = «» ‘Добавить временный лист для проверки сортировки листов.Add ActiveSheet.Name = «TempSort»‘ Копировать ТЕКУЩИЙ столбец в столбцы A, B в текущих листах (CSheet). Выбрать столбцы (CColumn) ) .Select Selection.Copy Sheets («TempSort»). Select Range («A1»). Select ActiveSheet.Paste Range («B1»). Select ActiveSheet.Paste Application.CutCopyMode = False ‘В столбце C проверка на равенство столбцов A/B ‘Если Sum in C1 = 0, тогда ОК, в противном случае Col A Col ​​B Range («B2»). Выберите Selection.End (xlDown). Выберите Bottom = ActiveCell.Row Range (Cells (2, 3), Cells (Внизу, 3)). Выберите Selection.FormulaArray = «= IF (RC [-2] = RC [-1], 0,1)» Диапазон («C1»). Выберите ActiveCell.FormulaR1C1 = «= SUM (R [1] C: R [6535] C) «‘Сортировка столбца B — по возрастанию — проверьте, если c1 = 0 столбцов (» B: B «). Выберите выбор. Sort Key1: = Range («B2»), Order1: = xlDescending, _ Header: = xlYes, OrderCustom: = 1, MatchCase: = False, _ Orientation: = xlTopToBottom, DataOption1: = xlSortNormal If Cells (1, 3). Value = 0 Затем FlagSort = «Ascending» ‘Сортировка столбца B — по убыванию — проверьте, если c1 = 0 столбцов («B: B»). Выберите Selection.Sort Key1: = Range («B2»), Order1: = xlAscending, _ Заголовок: = xlYes, OrderCustom: = 1, MatchCase: = False, _ Orientation: = xlTopToBottom, DataOption1: = xlSortNormal If Cells (1, 3) .Value = 0 Then FlagSort = «Descending» If FlagSort = «Ascending» Then ‘Цвет заголовка на исходном листе: желтые листы (CSheet) .Cells (1, CColumn) .Interior.ColorIndex = 36 End If If FlagSort = «Descending» Then’ Цвет заголовка на исходном листе оранжевые листы (CSheet) .Cells (1, CColumn) ) .Interior.ColorIndex = 44 End If ‘Удалить временные листы листов («TempSort»). Выберите ActiveWindow.SelectedSheets.DeleteEnd Sub

Как только будет определено, был ли исходный столбец в порядке возрастания или убывания , то первая ячейка столбца в исходном листе установлен желтый или оранжевый цвет соответственно. Наконец, временный рабочий лист удаляется.

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

Конечно, любой подобный макрос является подходящим. нетривиально, так что вам может быть проще понять, как вы хотите отсортировать данные, а затем отсортировать их таким образом с самого начала.

Источник: frestage.ru

Бытовой вопрос