Сортування днів народження в Excel VBA - Прості макроси Excel

Зміст

Нижче ми розглянемо програму в Excel VBA що сортує дні народження до перших місяців і днів до другого (тому ми ігноруємо роки). Ми хочемо, щоб день народження з найменшим місячним номером був на першій позиції. Якщо є дні народження з однаковими номерами місяців, ми хочемо, щоб день народження з першим найменшим числом дня був спочатку. Ви готові?

Ситуація:

Примітка: Дати у форматі США. Перші місяці, другі дні. Цей тип формату залежить від регіональних налаштувань Windows.

1. По -перше, ми оголошуємо вісім змінних. Одну змінну Date ми називаємо tempDate, одну змінну String - tempName. Інші шість змінних - це цілочисельні змінні з іменами monthToCheck, dayToCheck, monthNext, dayNext, i та j.

Затемнити tempDate як дату, tempName як рядок
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. Починаємо дві петлі For Next.

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

Приклад: для i = 2 перевіряється j = 3, 4,…, 12 і 13.

3. Ми ініціалізуємо чотири цілочисельні змінні. Ми використовуємо функцію місяць, щоб отримати місяць дати, а функцію день - день дати.

monthToCheck = місяць (Клітинки (i, 2). Значення)
dayToCheck = день (Клітинки (i, 2). Значення)
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 І 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 = Клітинки (i, 2). Значення
Клітинки (i, 2). Значення = Осередки (j, 2). Значення
Клітинки (j, 2). Значення = tempDate

6. Те ж саме робимо і з іменами. Додайте такі рядки коду до оператора If.

обміняти імена
tempName = Клітинки (i, 1). Значення
Клітинки (i, 1). Значення = Осередки (j, 1). Значення
Клітинки (j, 1). Значення = tempName

7. Ми закриваємо другий цикл For Next (Поза оператором If).

Далі j

Для i = 2 та j = 7 програма Excel VBA поміняла дати та імена. Це означає, що ми отримуємо Річарда на першій позиції, а Брег'є на позиції 7. ​​Це також означає, що ми отримуємо новий місяцьToCheck та 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).

Далі i

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

Результат:

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

wave wave wave wave wave