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

Sort Birthdays Example

Примечание: Даты в формате США. Месяцы первый, второй дни. Этот тип формата зависит от ваших окон региональных настроек.

  1. Во-первых, мы объявляем восемь переменных. Одна переменная дата мы называем 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
  1. Мы начинаем два для следующих петель.

For i = 2 To 13

For j = i + 1 To 13

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

  1. инициализирует четыре переменные 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; будет выбрана дата Нильса.

  1. Для сортировки даты должным образом, мы сравним первую дату (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).

  1. Мы ссылка: / 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
  1. Мы делаем то же самое с именами. Добавьте следующие строки кода в операторе If.

'swap names

tempName = Cells(i, 1).Value

Cells(i, 1).Value = Cells(j, 1).Value

Cells(j, 1).Value = tempName
  1. Мы закрываем второй для следующего цикла (за пределами если заявление).

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, и т.д.

  1. Закройте первый Для следующего цикла (вне если заявление).

Next i
  1. Проверьте свою программу.

Результат:

Sort Birthdays in Excel VBA