/ / Excel'de Doğum Günlerini Sırala VBA

Excel VBA'da Doğum Günlerini Sırala

Aşağıda bir programa bakacağız Excel VBA o doğum günlerini sıralar aylar önce ve günler ikinci (bu yüzden gözardı ediyoruzyıl). İlk pozisyondaki en düşük ay sayısına sahip doğum tarihini istiyoruz. Eşit ay sayıları olan doğum günleri varsa, doğum gününü en düşük gün numarası ile birlikte istiyoruz. Hazır mısın?

Durum:

Doğum Günleri Örneğini Sırala

Not: Tarihler ABD Formatındadır. Aylar önce, İkinci günler. Bu tür format, windows bölgesel ayarlarınıza bağlıdır.

1. İlk olarak, sekiz değişkeni beyan ederiz. TempDate olarak adlandırdığımız bir Tarih değişkeni, tempName adını verdiğimiz bir String değişkeni. Diğer altı değişken ise, MonthToCheck, dayToCheck, monthNext, dayNext, i ve j adlarıyla tamsayı değişkenleridir.

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. İki Sonraki Döngü için başlıyoruz.

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

Örnek: i = 2 için j = 3, 4, ..., 12 ve 13 kontrol edilir.

3. Dört Tamsayı değişkenini başlatıyoruz. Bir ayın tarihini almak için Ay işlevini ve bir günün tarihini almak için Gün işlevini kullanırız.

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

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

Örneğin: başlangıçta, i = 2 için; Bregje'nin tarihi ve j = i + 1 = 2 + 1 = 3; Niels'ın tarihi seçilecek.

4. Tarihleri ​​düzgün bir şekilde sıralamak için, ilk tarihi (monthToCheck ve dayToCheck) bir sonraki tarihle (monthNext ve dayNext) karşılaştırırız. Bir sonraki tarih "düşük" ise, tarihleri ​​ve adları değiştiririz. Aşağıdaki If Then ifadesini ekleyin.

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

End If

Yukarıdaki ifade doğruysa tarihleri ​​ve adları değiştiririz.

Örneğin: i = 2 ve j = 3 için Bregje ve Niels'ın tarihi kontrol edilir. MonthNext = 6, monthToCheck = 2. monthNext monthToCheck'den daha yüksek olduğu için yukarıdaki ifade doğru değil. Excel VBA, j'yi 1 artırır ve i = 2 ve j = 4 için kod satırlarını tekrarlar. Joost'un (j = 4) Bregje'den daha yüksek bir ay sayısına sahip olduğunu kolayca görebilirsiniz, böylece bir sonraki sayfaya gideriz. J = 5 ve j = 6 için aynı sonucu elde ederiz. J = 7'ye geldiğimizde, şu değişkenlere sahibiz: monthNext = 2 ve dayNext = 9. MonthToCheck = 2 ve dayToCheck = 12. Şimdi yukarıdaki ifade doğrudur aydan beriNext = monthToCheck ve dayNext (9) dayToCheck'den (12) daha düşük.

5. Tarihleri ​​değiştiririz. Bir tarihi geçici olarak tempDate olarak saklarız, böylece Excel VBA tarihleri ​​doğru şekilde değiştirebilir. If deyiminde aşağıdaki kod satırlarını ekleyin.

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

6. İsimleriyle aynı şeyi yaparız. If deyiminde aşağıdaki kod satırlarını ekleyin.

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

7. İkinci Sonraki döngü için (If ifadesinin dışında) kapatıyoruz.

Next j

İ = 2 ve j = 7 için, Excel VBA tarihlerini değiştirdive isimler. Bu, ilk pozisyonda Richard'ı ve 7. pozisyonda Bregje'yi aldığımız anlamına geliyor. Bu aynı zamanda, bir sonraki adımımızın başlangıcında (i = 2 ve j = 8 için) yeni bir ayToCheck ve dayToCheck almamız anlamına geliyor. Şimdi Richard'ı Dineke ile karşılaştırıyoruz (j = 8). Bu tarihleri ​​ve isimleri değiştirmeye gerek olmadığını kolayca görebilirsiniz çünkü Richard'ın "daha düşük" bir tarihi vardır. Nitekim Richard (i = 2) 'nin Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) ve Debby (j) ile değiştirilmesi gerekmemektedir. = 13). Bunun nedeni Richard'ın "en düşük" tarihe sahip olmasıdır. Bu şekilde Excel VBA (i = 2 için) ilk konumda "en düşük" tarih alacaktır. İkinci konumdaki ikinci "en düşük" tarihi almak için, Excel VBA, i = 3 için aynı adımları yineler. Üçüncü konumda üçüncü "en düşük" tarihi almak için, Excel VBA, i = 4 için aynı adımları yineler. vb.

8. İlk Sonraki Döngüsünü (If ifadesinin Dışında) kapatın.

Next i

9. Programınızı test edin.

Sonuç:

Excel VBA'da Doğum Günlerini Sırala

Ayrıca oku: