Отсортировать Дни рождения в Excel VBA
Ниже мы рассмотрим программу в Excel VBA, которая сортирует дни рождения месяцев и первые дни вторых (так мы игнорируем года). Мы хотим, чтобы день рождения с наименьшим номером месяца на первой позиции. Если есть дни рождения с одинаковыми номерами месяц, мы хотим, чтобы день рождения с наименьшим номером дня первого. Вы готовы? Ситуация:
Примечание: Даты в формате США. Месяцы первый, второй дни. Этот тип формата зависит от ваших окон региональных настроек.
-
Во-первых, мы объявляем восемь переменных. Одна переменная дата мы называем tempDate, одна переменная строка, которую мы называем tempName. Остальные шесть переменных Целые переменные с именами monthToCheck, dayToCheck, monthNext, dayNext, я и у.
Dim tempDate As Date, tempName As String Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer
-
Мы начинаем два для следующих петель.
For i = 2 To 13 For j = i + 1 To 13
Пример: для I = 2, J = 3, 4, …, 12 и 13 проверяются.
-
инициализирует четыре переменные Integer. Мы используем функцию месяца, чтобы получить месяц даты и функции дня, чтобы получить день в день.
monthToCheck = month(Cells(i, 2).Value) dayToCheck = day(Cells(i, 2).Value) monthNext = month(Cells(j, 2).Value) dayNext = day(Cells(j, 2).Value)
Например: в начале, при г = 2; дата Bregje, и J = I + 1 = 2 + 1 = 3; будет выбрана дата Нильса.
-
Для сортировки даты должным образом, мы сравним первую дату (monthToCheck и dayToCheck) со следующей датой (monthNext и dayNext). Если следующая дата «опустить», мы переставляем даты и имена. Добавьте следующее заявление If Then.
If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then End If
Если приведенное выше утверждение верно, мы переставляем даты и имена.
Например: I = 2 и J = 3, дата и Bregje Niels проверяются. MonthNext = 6, monthToCheck = 2. Приведенное выше утверждение не верно, так как monthNext выше monthToCheck. Excel VBA приращений J на 1 и повторяет строки кода для я = 2 и J = 4. Вы можете легко видеть, что Joost (J = 4) имеет более высокий номер месяца, чем Bregje, поэтому мы идем к следующему. Мы получаем тот же результат для J = 5 и у = 6. Когда мы приходим к J = 7, мы имеем следующие переменные: monthNext = 2 и dayNext = 9. MonthToCheck = 2 и dayToCheck = 12. Теперь приведенное выше утверждение верно так monthNext = monthToCheck и dayNext (9) ниже, чем dayToCheck (12).
-
Мы
ссылка: / VBA-примеры-своп-значение [своп]
дата. Мы временно хранить одну дату tempDate, так что Excel VBA может поменять даты правильно. Добавьте следующие строки кода в операторе If.
'swap dates tempDate = Cells(i, 2).Value Cells(i, 2).Value = Cells(j, 2).Value Cells(j, 2).Value = tempDate
-
Мы делаем то же самое с именами. Добавьте следующие строки кода в операторе If.
'swap names tempName = Cells(i, 1).Value Cells(i, 1).Value = Cells(j, 1).Value Cells(j, 1).Value = tempName
-
Мы закрываем второй для следующего цикла (за пределами если заявление).
Next j
Для я = 2 и j = 7, Excel VBA местами даты и имена. Это означает, что мы получаем Ричард на первую позицию и Bregje в положении 7. Это также означает, что мы получаем новый monthToCheck и dayToCheck в начале следующей итерации (при г = 2 и j = 8). Теперь мы будем сравнивать Ричард с Dineke (J = 8). Вы можете легко увидеть, что нет никакой необходимости заменить эти даты и имена, потому что Ричард имеет «низкую» дату. В самом деле, нет никакой необходимости, чтобы заменить Ричарда (я = 2) с Яном (J = 9), Венди (J = 10), Йерун (J = 11), Джон (J = 12) и Дебби (J = 13). Это потому, что Ричард имеет «низкую» дату. Таким образом, Excel VBA получит (для я = 2) «низкий» дату на первой позиции. Чтобы получить второе «низкий» даты на второй позиции, Excel VBA повторяет те же самые шаги для я = 3. Чтобы получить третий «низкий» дату в третьей позиции, Excel VBA повторяет те же самые шаги для я = 4, и т.д.
-
Закройте первый Для следующего цикла (вне если заявление).
Next i
-
Проверьте свою программу.
Результат: