Перейти к содержимому

Алан Мюррей. Эффективная работа в Microsoft Excel

Книга предназначена для пользователей Excel, которые хотят расширить свой арсенал. Алан Мюррей, преподаватель и консультант по Excel, открывает ряд секретов, которые выведут работу с программой на новый уровень. Вы изучите техники форматирования, улучшающие представление данных, создание динамических отчетов. Отдельная глава посвящена приемам построения профессионально выглядящих, динамически обновляемых диаграмм. Представлены инструменты Power Query и Power Pivot, расширяющие возможности Excel.

Алан Мюррей. Эффективная работа в Microsoft Excel. – М.: ДМК Пресс, 2021. – 276 с.

Скачать краткое содержание в формате Word или pdf (конспект составляет около 7% от объема книги), примеры в формате Excel

На момент публикации заметки книга доступна на сайте издательства.

Файлы примеров можно скачать на странице книги издательства Apress, нажав зеленую кнопку Code, и выбрав опцию Download ZIP.

Глава 1. Приемы Excel и инструменты для работы с данными

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

Генерация последовательностей

Допустим, перед вами стоит задача создания списка дат с 3 марта по 20 октября 2021 г. с двухнедельным интервалом. Введите значение 03.03.2021 в ячейку и пройдите по меню Главная –> Заполнить –> Прогрессия. Откроется диалоговое окно Прогрессия:

Рис. 1. Настройка прогрессии

Excel автоматически определит, что вы собираетесь строить последовательность дат. Убедитесь, что в группе Тип выбран пункт даты, а в группе Единицыдень. Введите число 14 в поле Шаг и 20.10.2021 – в поле Предельное значение. Нажмите Ok.

На листе появится сгенерированный список. Этот способ легче, чем вводить две даты в ячейки и протягивать маркер заполнения вниз до 20 октября 2021 года.

Рис. 2. Список дат, сгенерированный прогрессией

Мгновенное заполнение

Предположим, вам необходимо извлечь из кодов в столбце А (рис. 3) содержимое между двумя дефисами, плюс перевести извлеченные фрагменты в верхний регистр. Встаньте в ячейку B2 и введите буквы JH в верхнем регистре. Нажмите сочетание клавиш Ctrl+Enter, чтобы подтвердить ввод, но остаться при этом в ячейке B2.

Рис. 3. Создание шаблона для мгновенного заполнения

Нажмите сочетание клавиш Ctrl+E, активирующее мгновенное заполнение, или пройдите по меню Главная –> Заполнить –> Мгновенное заполнение.

Рис. 4. Мгновенное заполнение автоматически распознает шаблон

Преобразование форматов дат с помощью инструмента Текст по столбцам

У Excel время от времени возникают проблемы с распознаванием дат. Виной тому могут быть данные с форматом дат, отличным от региональных настроек. Например, в США используется формат MM/DD/YYYY, а у нас DD/MM/YYYY. В ячейках А2:А5 представлено четыре даты в американском формате. Excel распознал лишь две из них, причем неверно:

Рис. 5. Excel ожидает дату в формате DD/MM/YYYY

Инструмент Текст по столбцам легко справится с преобразованием. Выделите диапазон с датами и кликните Данные –> Текст по столбцам. На первом шаге оставьте С разделителями. Нажмите Далее. На втором шаге снимите все разделители. На третьем шаге установите переключатель в положение Дата и в выпадающем списке выберите пункт МДГ:

Рис. 6. Настройки мастера инструмента Текст по столбцам

Нажмите на кнопку Готово. Теперь даты на листе распознаются и хранятся правильно:

Рис. 7. Распознанные даты

Копирование формата диаграммы с помощью специальной вставки

Инструмент Специальная вставка может быть использован для быстрого обмена форматированием между графиками. Я часто строю контрольные карты Шухарта. К сожалению, Excel по умолчанию строит довольно непривлекательные графики. Поэтому копирование формата диаграммы – это отличный способ сэкономить время:

Рис. 8. Контрольная карта Шухарта: наверху – пользовательское форматирование, внизу – вид по умолчанию

Выделите график, с которого хотите «снять» форматирование, и нажмите Ctrl+C. Теперь выделите график, которому хотите придать такой же внешний вид. Пройдите по меню Главная –> Вставить –> Специальная вставка. В открывшемся диалоговом окне  выберите опцию Форматы, поскольку данные мы переносить не хотим. Вот и все! Оба графика отформатированы одинаково:

Рис. 9. Отформатированная диаграмма с помощью специальной вставки

Глава 2. Десять мощных функций Excel

В главе подробно рассмотрены несколько любимых функций автора: СУММПРОИЗВ, УНИК, СОРТ, СОРТПО, ФИЛЬТР, ИНДЕКС, ВЫБОР, ПРОСМОТРX, ДВССЫЛ, ПЕРЕКЛЮЧ. Те из них, что я подробно рассмотрел ранее, выделены ссылками.

Все функции рабочего листа что-то возвращают. Они не могут удалять значения или форматировать их. Для этого понадобится Power Query, VBA или условное форматирование. Примеры из книги используют умные таблицы.

Формулы динамических массивов стали доступны подписчикам Microsoft 365 в ноябре 2019 года и перевернули с ног на голову принципы написания формул в Excel. Увы, динамические массивы недоступны пользователям Excel версии 2019 и ниже. Суть этих формул заключается в том, что они автоматически распространяются на соседние ячейки при возврате множества значений. Такое поведение получило название «перенос».

Функция ВЫБОР

Выбирает значение или действие из списка по номеру индекса. Например, если первые семь значений — это дни недели, то функция ВЫБОР возвращает один из дней при использовании числа от 1 до 7 в качестве аргумента. Синтаксис:

ВЫБОР(номер_индекса;значение1;[значение2];…)

Номер_индекса — обязательный аргумент. Номер индекса должен быть числом от 1 до 254, формулой или ссылкой на ячейку, содержащую число в диапазоне от 1 до 254. Если номер_индекса равен 1, то функция ВЫБОР возвращает значение1; если он равен 2, возвращается значение2 и так далее. Аргумент «значение1» является обязательным, следующие за ним — нет. Аргументы могут быть числами, ссылками на ячейки, определенными именами, формулами, функциями или текстом. Если номер_индекса является массив, то при выполнении функции ВЫБОР вычисляется каждое значение.

Аргументы-значения функции ВЫБОР могут быть ссылками на интервал. Например, формула: =СУММ(ВЫБОР(2;A1:A10;B1:B10;C1:C10)) эквивалентна формуле: =СУММ(B1:B10).

Удобно использовать функцию ВЫБОР совместно с элементами управления формы:

Рис. 10. Выбор типа агрегации

Кнопки переключателей, как и большинство элементов управления, возвращают порядковый номер выбранного элемента. И именно это позволяет эффективно использовать их совместно с функцией ВЫБОР. Для начала необходимо связать переключатели с ячейкой на листе, в которой будет показан порядковый номер выбранного в данный момент переключателя. Щелкните правой кнопкой мыши по переключателю и выберите в контекстном меню пункт Формат объекта. Установите курсор в поле Связь с ячейкой, после чего выберите любую ячейку на рабочем листе для осуществления связи в ней.

Рис. 11. Привязка списка переключателей к ячейке

Таким образом, при выборе пользователем переключателя Сумма в указанной нами ячейке будет показываться 1, при выборе Среднее – 2, а Максимум даст значение 3.

В ячейке D2 используем формулу:

Еще одним любопытным способом использования функции ВЫБОР является перестановка столбцов в таблице. Лучшим применением такого подхода является использование функции ВЫБОР в связке с функцией ФИЛЬТР. Последняя имеет недостаток – столбцы массива, который она возвращает, должны идти подряд. Например, если мы хотим применить функцию ФИЛЬТР к таблице с именем Employees, показанной на рис. 12, но вернуть только столбцы First Name, Last Name, Age и Salary, одна она с этой задачей не справится. При помощи функции ВЫБОР мы можем указать конкретные столбцы в выборке, а функция ФИЛЬТР поможет нам их вернуть.

Рис. 12. Таблица Employees, которую необходимо отфильтровать

Функция ВЫБОР использует массив констант для порядковых номеров столбцов. Функция ФИЛЬТР возвращает список сотрудников с зарплатой, равной или превышающей 35 000:

Рис. 13. Использование функции ВЫБОР для указания столбцов с дальнейшей фильтрацией

Функция ПЕРЕКЛЮЧ

Функция ПЕРЕКЛЮЧ сверяет переданное значение (выражение) со списком значений и возвращает первое найденное совпадение. Это очень лаконичная функция, позволяющая избегать употребления множества вложенных условных конструкций. Синтаксис:

=ПЕРЕКЛЮЧ(выражение;значение1;результат1;[по_умолчанию_или_значение2;результат2];…)

выражение – выражение, которое будет сравниваться со значениями значение1, значение2 и т. д.;

значенеи1 – значение, с которым будет сравниваться выражение из первого параметра;

результат1 – возвращаемое значение в случае равенства переданного выражения и первого значения;

[по_умолчанию_или_значение2;результат2] – список оставшихся значений для сравнения или значение, возвращаемое по умолчанию в случае, если совпадений обнаружено не будет.

Допустим, у вас есть таблица Memberships, в первом столбце которой (Grade) могут присутствовать три значения, соответствующие статусу членства: Platinum, Gold или Silver. Нам необходимо в зависимости от статуса начислять суммы взносов (fee) в соответствии со следующими правилами: Platinum — 90, Gold — 65, а Silver — 50. Введем формулу в ячейку B2:

=ПЕРЕКЛЮЧ([@Grade];»Platinum»;90;»Gold»;65;»Silver»;50;)

Проверяемым выражением является значение из столбца Grade, которое указывается всего раз и трижды сопоставляется с предложенными вариантами.

Рис. 14. Проверка значений при помощи функции ПЕРЕКЛЮЧ

Последним параметром функция ПЕРЕКЛЮЧ может принимать значение, которое будет возвращено по умолчанию в случае отсутствия точных совпадений с предложенными вариантами. В следующей формуле мы в качестве значения по умолчанию передадим текст Нет данных:

=ПЕРЕКЛЮЧ([@Grade];»Platinum»;90;»Gold»;65;»Silver»;50;»Нет данных»)

Использование логических операторов

Давайте применим функцию ПЕРЕКЛЮЧ совместно с логическими операторами для расчета скидки на основании количества лет, в течение которых покупатель приобретает наши товары. Тем клиентам, которые с нами уже восемь лет и более, мы присвоим скидку 15%, за четыре года и более дадим 10%, а если покупатель приобретает нашу продукцию меньше четырех лет, скидки не будет:

=ПЕРЕКЛЮЧ(ИСТИНА;[@Years]>=8;15%;[@Years]>=4;10%;0%)

Рис. 15. Использование формул для выражения и значений в функции ПЕРЕКЛЮЧ

Порядок, в котором перечислены значения в функции ПЕРЕКЛЮЧ, исключительно важен, поскольку проверка выражения выполняется строго от первой пары к последней. Использование значения ИСТИНА в выражении позволяет писать такие конструкции, как [@Years]>=8.

В выражении и проверочных значениях, передаваемых в функцию ПЕРЕКЛЮЧ, также могут использоваться формулы. Скажем, у вас есть таблица Work_Pay с датами и отработанными часами. Тариф почасовой оплаты в субботу и воскресенье отличается от будних дней.

Мы использовали функцию ДЕНЬНЕД для проверки дня недели. Она возвращает порядковый день недели (аргумент тип = 2 задает начало недели с понедельника). Для субботы он равен 6, а для воскресенья – 7:

Рис. 16. Использование формул для выражения и значений в функции ПЕРЕКЛЮЧ

Функция ПЕРЕКЛЮЧ сравнивает выражение сначала с субботой (6) и присваивает соответствующий тариф, затем с воскресеньем (7) и делает то же самое. В виде значения по умолчанию возвращается тариф будних дней.

Глава 3. Продвинутые техники форматирования

В главе рассмотрены продвинутые техники условного форматирования и тонкости настройки пользовательских числовых форматов.

Графики в ячейках при помощи функции ПОВТОР

Допустим, у вас есть диапазон с двумя столбцами, содержащими имя и количество баллов. В третьем столбце вы хотим построить столбчатую диаграмму, отражающую число баллов. Используем функцию ПОВТОР, которая позволяет вывести на экран значение заданное количество раз. Мы используем вертикальную черту (|), которая будет повторена число раз, указанное в столбце B.

Рис. 17. Графики в ячейках с использованием шрифта Stencil и условного форматирования

Введите в ячейку C2 формулу =ПОВТОР(«|»;B2)&» «&B2 и протяните ее вниз. Получилось не очень красиво. Измените шрифт ячеек на Playbill или Stencil. Измените цвет шрифта на более подходящий, например, зеленый. Если отображаемые значения слишком большие, можете разделить их на какую-то константу, чтобы уменьшить количество повторений. Поскольку такие диаграммы строятся при помощи обычных функций Excel и форматирования, вы не ограничены функционалом, присущим встроенным гистограммам. Например, вы можете воспользоваться условным форматированием, чтобы изменить цвет столбцов со значением меньше 60.

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

Глава 4. Трюки в работе с диаграммами

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

Самый простой способ гарантировать автоматическое обновление диаграмм при добавлении новых данных – использовать в качестве источника умную таблицу. При добавлении строк и столбцов в такую таблицу график, построенный на ее основании, автоматически будет изменен.

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

Добавление интерактивности при помощи проверки данных

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

Рассмотрим таблицу Period_Sales, в которой показаны продажи товаров по периодам. Предоставим пользователю возможность выбрать из выпадающего списка товар, по которому будет построен отчет, и ввести период, как показано на рисунке:

Рис. 18. Интерактивные продажи товаров по периодам

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

Эта формула возвращает имена последних пяти периодов (значение в ячейке Е2). Используем ее для имени Period_Names:

Рис. 19. Предопределенное имя Period_Names и его формула

Следующую формулу мы используем в имени Product_Values:

Она возвращает значения для выбранного товара и указанного количества последних периодов (функция ПОИСКПОЗ используется для получения номера строки выбранного товара).

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

Рис. 20. Выбраны продажи Pineapple за периоды с первого по четвертый

На вкладке Конструктор нажмите на кнопку Строка/Столбец, чтобы поменять строки на столбцы и наоборот (по умолчанию Excel расположил оси наоборот). Используйте имя Period_Names для диапазона подписей оси абсцисс и Product_Values – для значений по оси ординат (но не имени ряда):

Рис. 21. Присвоение имен источникам данных диаграммы

Обратите внимание, на имя листа перед именами. Без него трюк не сработает.

Теперь, если выбрать из выпадающего списка другой товар или ввести другое количество периодов, график автоматически перестроится.

Рис. 22. Интерактивная линейная диаграмма с выпадающим списком и ячейкой для ввода

Глава 5. Power Query. Мир никогда не будет прежним

Появление инструмента Power Query стало одной из важнейших вех в истории Excel. То, что раньше требовало огромных усилий и написания макросов на VBA, сейчас можно сделать всего несколькими щелчками мыши. Глубокое понимание роли Power Query изменит ваше отношение к работе с данными навсегда. Я перевел и опубликовал книгу, посвященную этому инструменту.

Power Query является полноценным инструментом ETL (extract, transform, load – извлечение, преобразование, загрузка):

Рис. 23. Извлечение, преобразование и загрузка при помощи Power Query

Power Query обеспечивает возможность подключения к различным источникам внешних данных: файлы CSV, папки с файлами, документы PDF, сайты в интернете, SharePoint и многое другое. После установки соединения мы можем обновлять информацию из источника по нажатию кнопки. Вам не придется каждый раз указывать путь к файлу или адрес сайта для импорта.

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

По мере преобразования данных в редакторе Power Query каждый шаг записывается. Фактически это сценарий, который можно запускать снова и снова нажатием кнопки Обновить. Записанные шаги позже можно удалять или изменять.

Автор на примерах рассмотрел следующие задачи: преобразование плохо структурированных данных в Excel, объединение нескольких листов Excel в один в текущей книге, подключение к другой рабочей книге Excel, соединение нескольких таблиц по ключевому (совпадающему столбцу), импорт нескольких или всех файлов из папки, извлечение данных из интернета, импорт из файла PDF, группировка и сведение столбцов.

Рассмотрим подробнее…

Соединение запросов

Соединение двух запросов (таблиц) – отличная альтернатива ВПР. На выходе вы получаете общую таблицу, в которой к столбцам первой таблицы добавляются столбцы из второй. Основой соединения служит ключевой столбец, присутствующий в обеих таблицах. Всего Power Query предлагает шесть типов соединения запросов. Каждый из них следует своей логике, так что выбор типа соединения зависит от того, что вам нужно:

  • внешнее соединение слева: в результирующий набор включаются все строки из левой таблицы и только совпадающие – из правой (классический поиск);
  • внешнее соединение справа: в результирующий набор включаются все строки из правой таблицы и только совпадающие – из левой;
  • полное внешнее: в результирующий набор включаются все строки из обеих таблиц;
  • внутреннее: в результирующий набор включаются только совпадающие строки из обеих таблиц;
  • анти-соединение слева: в результирующий набор включаются все строки из левой таблицы, кроме совпадающих с правой;
  • анти-соединение справа: в результирующий набор включаются все строки из правой таблицы, кроме совпадающих с левой.

Следующий пример содержит две таблицы с именами участников двух мероприятий. Обе таблицы были предварительно загружены в файл Excel в виде подключений. Мы хотим (1) вывести имена участников, посетивших оба мероприятия и (2) имена тех, кто посетил только второе мероприятие и не был на первом (их мы будем считать новыми посетителями):

Рис. 24. Таблицы с участниками двух мероприятий

В Excel пройдите по меню Данные –> Получить данные –> Объединить запросы –> Объединить. Выберите таблицу Event1 в первом списке и Event2 – во втором. Щелкните по столбцу Name в таблице Event1, а затем в таблице Event2. Этот столбец будет являться идентифицирующим признаком в обеих таблицах. Выберите в списке Тип соединения вариант Внутреннее:

Рис. 25. Окно соединения таблиц

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

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

Снова объедините две исходные таблицы, но на этот раз в списке Тип соединения выберите вариант анти-соединение справа. Переименуйте новый запрос в Event2Only. При такой связке возвращаются только строки, присутствующие в правой таблице:

Рис. 26. Результат анти-соединение справа

Из левой таблицы строки не извлекаются, и нам необходимо раскрыть правую таблицу, чтобы получить правильные результаты. Щелкните на кнопке с двойной стрелкой в заголовке столбца Event2, оставьте флажки на обоих столбцах, а флажок Использовать исходное имя столбца как префикс снимите. Удалите два первых столбца и переименуйте столбец Name.1 в Name, а Location.1 – в Location. Закройте и загрузите запрос в виде таблицы на рабочий лист.

Рис. 27. Результаты двух соединенных запросов

Глава 6. Power Pivot. Внутренняя модель данных Excel

Надстройка Power Pivot позволяет разработчикам и пользователям Excel преодолеть ограничения, характерные для обычных рабочих листов, и выполнять углубленный анализ данных. Названия инструментов зачастую могут вводить пользователей в заблуждение. По сути, термины Power Pivot и модель данных сегодня являются синонимами. При этом с моделями данных вполне можно работать и без использования сводных таблиц (PivotTable), но ничто не мешает продолжать называть их термином Power Pivot. Подробнее см. Роб Колли. Формулы DAX для Power Pivot.

К основным преимуществам работы с Power Pivot можно отнести следующие: работу с огромными объемами данных (мы не ограничены лимитом Excel в 1 млн. строк), создание связей между таблицами, формулы DAX, в разы превосходящие стандартный набор из 11 функций, доступных при работе со сводными таблицами.

Power Pivot представляет собой надстройку COM, которая должна быть активирована перед использованием. Пройдите по меню Файл –> Параметры, перейдите на вкладку Надстройки. В самом низу в списке Управление выберите Надстройки COM и нажмите на кнопку Перейти. В открывшемся окне установите флажок напротив Microsoft Power Pivot for Excel, нажмите OK. На ленте появится вкладка Power Pivot. Перейдите на нее и кликните кнопку Управление. Откроется окно Power Pivot.

Для эффективной работы с датами вам часто будет нужна таблица дат, включающая, собственно, даты, месяцы, годы, кварталы, дни недели и др. Покажем, как создать простейшую таблицу дат непосредственно в Power Pivot.

В окне Power Pivot перейдите на вкладку Конструктор, нажмите на выпадающую кнопку Таблица дат и выберите пункт Создать. Появится таблица дат с именем Calendar с предустановленным набором столбцов и мер из шаблона:

Рис. 28. Таблица дат, созданная за пару щелчков мыши

По умолчанию календарь был создан для дат с 01.01.2019 по 31.12.2019. Если вам нужно изменить диапазон дат, пройдите по меню Конструктор –> Таблица дат –> Обновление диапазона, и введите требуемые границы:

Рис. 29. Редактирование диапазона календаря

Внесем в таблицу некоторые изменения. Изменим формат месяцев. Для этого в формуле DAX заменим «MMMM» на «MMM».Рис. 30. Изменение формата месяцев с помощь формулы DAX

Сокращенные названия месяцев будут занимать меньше места в таблице и в виде меток на диаграмме. Аналогично сократим написание дней недели. Для этого выделим столбец Day Of Week и заменим формат «DDDD» на «DDD». А также изменим номер дня недели на более привычный. Для этого выделим столбец Day Of Week Number и изменим функцию WEEKDAY, передав ей в качестве параметра Return Type значение 2: =WEEKDAY([Date];2) Это позволит установить в качестве первого дня недели понедельник, а не воскресенье. Очень важно, чтобы первый день недели был установлен правильно – только в этом случае дни недели будут следовать в правильном порядке в полях сводной таблицы, в срезах и сводных диаграммах.

Рис. 31. Отредактированный календарь

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

Рис. 32. Power Pivot по умолчанию сортирует месяцы по алфавиту

Чтобы исправить ситуацию, перейдите в окно Power Pivot, выделите столбец Month. Пройдите по меню Главная –> Сортировка по столбцам –> Сортировка по столбцам (это не опечатка, два раза). Выберите Month Number в качестве столбца, по которому будет выполняться сортировка:

Рис. 33. Power Pivot позволяет сортировать один столбец по значениям в другом столбце

Нажмите Ok. Перейдите в Excel, убедитесь, что сортировка работает корректно:

Рис. 34. Сортировка названий месяцев по номерам месяцев

Повторите операцию для корректной сортировки имен дней недели (Day Of Week) по номерам дней недели (Day Of Week Number).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *