Сортировка по дням рождения списка сотрудников с помощью VBA Excel. Предназначена для отслеживания дней рождения по порядку в течение текущего года.
Зачем нужна сортировка по дням рождения?
Справка
- Дата рождения — число, месяц и год рождения — первый регистрируемый акт гражданского состояния.
- День рождения — число и месяц рождения — праздник, отмечаемый ежегодно.
Хорошим тоном у предпринимателей и организаций считается рассылка сотрудникам поздравлений с днём рождения, предоставление выходного дня или вручение подарка в честь этого праздника.
Для того, чтобы отследить дни рождения работников в течение текущего года, необходима сортировка списка работников по дням рождения.
Почему не подходит обычная сортировка?
Стандартная сортировка Excel по столбцу «Дата рождения» не решает задачу, так как в данном случае сортировка осуществляется по полной дате, включая год. В результате сотрудники выстраиваются в новый список не только по дням и месяцам, но и по году рождения.
Задача же состоит в том, чтобы расположить список по месяцам и дням так, чтобы они совпадали с последовательностью дней рождения в течение одного календарного года.
Сортировка сотрудников по дням рождения
Постановка задачи
Если компания ведёт учёт сотрудников в Excel, то список может выглядеть следующим образом (в упрощённом виде, конечно):

Необходимо с помощью VBA отсортировать список работников компании по дням рождения в течение одного года.
Подход к решению
Оптимальный способ — временно привести все даты к одному году (например, 2000), сохранив только месяц и день.
Почему именно 2000? Это високосный год, который универсально подходит для любых дат (корректно обрабатывается 29 февраля).
Алгоритм работы макроса будет следующим:
- Копирование имён сотрудников и их дней рождения на отдельный лист.
- Преобразование дат так, чтобы год стал фиксированным (2000) для всех работников.
- Выполнение сортировки.
- Отображение дат в удобном формате (например, «15 марта 1986»).
Исходный лист: «Сотрудники», лист назначения с результатами сортировки: «Дни рождения» (добавлен в книгу заранее).
VBA-код решения
Откройте редактор VBA (Alt + F11), создайте модуль и вставьте следующий код:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
Sub СортировкаПоДнямРождения() Dim wsSrc As Worksheet, wsDst As Worksheet, lastRow As Long, i As Long Set wsSrc = Worksheets("Сотрудники") Set wsDst = Worksheets("Дни рождения") ' Очистка листа назначения wsDst.Cells.Clear ' Определение последней строки на исходном листе lastRow = wsSrc.Cells(wsSrc.Rows.Count, 1).End(xlUp).Row ' Копирование данных wsSrc.Range("E1:E" & lastRow).Copy wsDst.Range("A1") wsSrc.Range("C1:C" & lastRow).Copy wsDst.Range("B1") ' Приведение всех дат к одному году (2000) во вспомогательном столбце For i = 2 To lastRow If IsDate(wsDst.Cells(i, 1).Value) Then wsDst.Cells(i, 3).Value = DateSerial(2000, _ Month(wsDst.Cells(i, 1).Value), _ Day(wsDst.Cells(i, 1).Value)) End If Next i ' Сортировка списка по датам во вспомогательном столбце wsDst.Range("A1:C" & lastRow).Sort _ Key1:=wsDst.Range("C2"), _ Order1:=xlAscending, _ Header:=xlYes With wsDst ' Удаляем вспомогательный столбец .Columns("C").Delete ' Формат отображения .Range("A2:A" & lastRow).NumberFormat = "[$-FC19]dd mmmm yyyy" ' Добавляем границы .Range("A1:B" & lastRow).Borders.LineStyle = True ' Автоподбор ширины столбцов .Range("A1:B" & lastRow).EntireColumn.AutoFit ' Активируем лист назначения .Select End With MsgBox "Список дней рождения успешно отсортирован.", vbInformation End Sub |
Что делает макрос
- Копирует столбцы «Дата рождения» и «ФИО» на лист «Дни рождения».
- Копирует даты в столбец «C», заменив годы рождения на 2000.
- Сортирует сотрудников по вспомогательному столбцу «C».
- Удаляет столбец «C» и приводит формат отображения дат рождения к удобному виду.
Макрос сохраняет годы рождения сотрудников, чтобы можно было отследить юбилеи и оценить возраст работника, от которого может зависеть выбор вручаемого подарка.
Результат работы кода

Возможные расширения
Для более продвинутой автоматизации можно:
- добавить автоматический запуск при открытии книги;
- реализовать фильтрацию по текущему месяцу;
- настроить подсветку ближайших дней рождения;
- добавить колонку с возрастом;
- интегрировать макрос с Outlook для автоматической отправки поздравлений.
Сортировка сотрудников по дням рождения без учёта года — типичная задача кадрового и административного учёта. Использование VBA Excel позволяет решить её корректно и полностью автоматизировать процесс.