/ Excel VBA에서 생일 정렬 / 정렬

Excel VBA에서 생일 정렬

아래에서 우리는 Excel VBA일종의 생일 첫 번째와 두 번째 달까지 몇 개월 (그래서 우리는 무시연령). 우리는 가장 낮은 달의 생일을 첫 번째 위치에두고 싶습니다. 월이 같은 생일이있는 경우 가장 낮은 날짜의 생일이 먼저 필요합니다. 준비 되었나요?

상태:

생일 정렬 예제

참고 : 날짜는 미국 형식입니다. 첫째 달, 일 초. 이 유형의 형식은 Windows 지역 설정에 따라 다릅니다.

1. 먼저 8 개의 변수를 선언합니다. tempDate라는 하나의 Date 변수, tempName이라고하는 하나의 String 변수. 나머지 6 개의 변수는 monthToCheck, dayToCheck, monthNext, dayNext, i 및 j 이름의 정수 변수입니다.

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

2. For Next 루프를 두 개 시작합니다.

For i = 2 To 13
    For j = i + 1 To 13

예 : i = 2, j = 3, 4, ..., 12 및 13을 확인합니다.

3. 4 개의 정수 변수를 초기화합니다. 우리는 Month 함수를 사용하여 날짜의 달을 가져오고 Day 함수를 사용하여 날짜의 날짜를 가져옵니다.

monthToCheck = month(Cells(i, 2).Value)
dayToCheck = day(Cells(i, 2).Value)

monthNext = month(Cells(j, 2).Value)
dayNext = day(Cells(j, 2).Value)

예를 들면 : 처음에는 i = 2; Bregje의 날짜 및 j = i + 1 = 2 + 1 = 3; Niels의 날짜가 선택됩니다.

4. 날짜를 올바르게 정렬하기 위해 첫 번째 날짜 (monthToCheck 및 dayToCheck)와 다음 날짜 (monthNext 및 dayNext)를 비교합니다. 다음 날짜가 "낮 으면"날짜와 이름을 서로 바꿉니다. If Then 문을 추가하십시오.

If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then

End If

위의 명령문이 true이면 날짜와 이름을 서로 바꿉니다.

예 : i = 2 및 j = 3 인 경우 Bregje와 Niels의 날짜가 확인됩니다. MonthNext = 6, monthToCheck = 2. monthNext가 monthToCheck보다 높으므로 위의 명령문은 true가 아닙니다. 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 문에 다음 코드 행을 추가하십시오.

"swap dates
tempDate = Cells(i, 2).Value
Cells(i, 2).Value = Cells(j, 2).Value
Cells(j, 2).Value = tempDate

6. 우리는 그 이름들과 똑같이합니다. If 문에 다음 코드 행을 추가하십시오.

"swap names
tempName = Cells(i, 1).Value
Cells(i, 1).Value = Cells(j, 1).Value
Cells(j, 1).Value = tempName

7. 두 번째 For Next 루프를 닫습니다 (If 문 외부).

Next j

i = 2 및 j = 7 인 경우 Excel VBA는 날짜를 바꿨습니다.및 이름. 즉 Richard가 첫 번째 위치에 있고 Bregje가 7 번째 위치에 있음을 의미합니다. 즉, 다음 달 반복 시작 (i = 2 및 j = 8)에서 새 monthToCheck 및 dayToCheck를 얻음을 의미합니다. 우리는 이제 Richard와 Dineke (j = 8)를 비교할 것입니다. Richard는 "더 낮은"날짜를 가지고 있기 때문에 쉽게 그 날짜와 이름을 바꿀 필요가 없음을 쉽게 볼 수 있습니다. 사실 Richard (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) 및 Debby (j)와 Richard (i = 2) = 13). 리처드가 "최저"데이트이기 때문입니다. 이렇게하면 Excel VBA는 첫 번째 위치에서 "최저"날짜를 가져옵니다 (i = 2의 경우). Excel VBA는 두 번째 위치에서 두 번째 "최저"날짜를 얻으려면 i = 3에 대해 똑같은 단계를 반복합니다. 세 번째 위치에서 세 번째 "최저"날짜를 얻으려면 Excel VBA는 i = 4, 기타

8. 첫 번째 For Next 루프를 닫습니다 (If 문 외부).

Next i

9. 프로그램을 테스트하십시오.

결과:

Excel VBA에서 생일 정렬

또한 읽으십시오 :