Сортировка дней рождения в Excel VBA - макросы Easy Excel

Содержание

Ниже мы рассмотрим программу на Excel VBA тот сортирует дни рождения на первые месяцы и вторые дни (поэтому мы игнорируем годы). Нам нужен день рождения с наименьшим номером месяца на первой позиции. Если есть дни рождения с одинаковыми номерами месяцев, нам сначала нужен день рождения с наименьшим номером дня. Вы готовы?

Ситуация:

Примечание. Даты указаны в американском формате. Первые месяцы, вторые дни. Этот тип формата зависит от региональных настроек Windows.

1. Сначала мы объявляем восемь переменных. Одну переменную Date мы называем tempDate, одну переменную String мы называем tempName. Остальные шесть переменных являются целочисленными переменными с именами monthToCheck, dayToCheck, monthNext, dayNext, i и j.

Dim tempDate As Date, tempName As String
Dim monthToCheck как целое число, dayToCheck как целое число, monthNext как целое число, dayNext как целое число, i как целое число, j как целое число

2. Запускаем два цикла For Next.

Для i = от 2 до 13
Для j = i + 1 до 13

Пример: для i = 2 проверяются j = 3, 4,…, 12 и 13.

3. Инициализируем четыре целочисленные переменные. Мы используем функцию «Месяц», чтобы получить месяц в дате, и функцию «День», чтобы получить день даты.

monthToCheck = месяц (Cells (i, 2) .Value)
dayToCheck = день (Cells (i, 2) .Value)
monthNext = месяц (Ячейки (j, 2). Значение)
dayNext = день (Ячейки (j, 2). Значение)

Например: в начале для i = 2; дата Брегье, а j = i + 1 = 2 + 1 = 3; дата Нильса будет выбрана.

4. Чтобы правильно отсортировать даты, мы сравниваем первую дату (monthToCheck и dayToCheck) со следующей датой (monthNext и dayNext). Если следующая дата «ниже», мы меняем местами даты и имена. Добавьте следующий оператор If Then.

Если (monthNext <monthToCheck) или (monthNext = monthToCheck And dayNext <dayToCheck) То
Конец, если

Если приведенное выше утверждение верно, мы меняем местами даты и имена.

Например: для i = 2 и j = 3 проверяется дата Брегье и Нильса. MonthNext = 6, monthToCheck = 2. Вышеприведенное утверждение неверно, поскольку monthNext больше, чем monthToCheck. Excel VBA увеличивает j на 1 и повторяет строки кода для i = 2 и j = 4. Вы можете легко увидеть, что у Joost (j = 4) номер месяца выше, чем у Bregje, поэтому мы переходим к следующему. Мы получаем тот же результат для j = 5 и j = 6. Когда мы приходим к j = 7, у нас есть следующие переменные: monthNext = 2 и dayNext = 9. MonthToCheck = 2 и dayToCheck = 12. Теперь приведенное выше утверждение верно. поскольку monthNext = monthToCheck и dayNext (9) меньше dayToCheck (12).

5. Меняем даты местами. Мы временно сохраняем одну дату в tempDate, чтобы Excel VBA мог правильно менять даты. Добавьте следующие строки кода в оператор If.

'поменять даты
tempDate = Cells (i, 2) .Value
Ячейки (i, 2) .Значение = Ячейки (j, 2) .Значение
Ячейки (j, 2) .Value = tempDate

6. Тоже самое проделываем с именами. Добавьте следующие строки кода в оператор If.

'поменять имена
tempName = Ячейки (i, 1). Значение
Cells (i, 1) .Value = Cells (j, 1) .Value
Ячейки (j, 1) .Value = tempName

7. Закрываем второй цикл For Next (вне оператора If).

Следующий j

Для i = 2 и j = 7 Excel VBA поменял местами даты и имена. Это означает, что мы получаем Ричарда на первой позиции и Брегье на позиции 7. Это также означает, что мы получаем новые monthToCheck и dayToCheck в начале нашей следующей итерации (для i = 2 и j = 8). Теперь сравним Ричарда с Динеке (j = 8). Вы легко видите, что нет необходимости заменять эти даты и имена, потому что у Ричарда дата «более низкая». На самом деле нет необходимости заменять Ричарда (i = 2) на Яна (j = 9), Венди (j = 10), Джеруна (j = 11), Джона (j = 12) и Дебби (j = 13). Это потому, что у Ричарда самое «низкое» свидание. Таким образом, Excel VBA получит (для i = 2) самую низкую дату на первой позиции. Чтобы получить вторую «самую низкую» дату на второй позиции, Excel VBA повторяет те же шаги для i = 3. Чтобы получить третью «самую низкую» дату на третьей позиции, Excel VBA повторяет те же шаги для i = 4, и т.п.

8. Закройте первый цикл For Next (вне оператора If).

Далее я

9. Протестируйте свою программу.

Результат:

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave