Aşağıda bir programa bakacağız Excel VBA'sı o doğum günlerini sıralar birinci aylara ve ikinci günlere (böylece yılları yok sayarız). İlk sırada en düşük ay numarasına sahip doğum gününü istiyoruz. Ay sayıları eşit olan doğum günleri varsa, önce en küçük gün sayısına sahip doğum gününü istiyoruz. Hazır mısın?
Durum:
Not: Tarihler ABD Formatındadır. Önce aylar, sonra Günler. Bu biçim türü, Windows bölgesel ayarlarınıza bağlıdır.
1. İlk önce sekiz değişken tanımlıyoruz. TempDate olarak adlandırdığımız bir Date değişkeni, tempName adını verdiğimiz bir String değişkeni. Diğer altı değişken, moonToCheck, dayToCheck, ayNext, dayNext, i ve j adlarına sahip Tamsayı değişkenlerdir.
Dim tempDate As Date, tempName As String
Ay Tamsayı Olarak Kontrol Et, gün Tamsayı Olarak Kontrol Et, aySonraki Tamsayı Olarak, dayNext As Integer, i As Integer, j As Integer
2. İki For Next döngüsü başlatıyoruz.
i = 2 ila 13 için
j = i + 1 ila 13 için
Örnek: i = 2 için j = 3, 4,… , 12 ve 13 kontrol edilir.
3. Dört Tamsayı değişkenini başlatıyoruz. Bir tarihin ayını almak için Ay işlevini ve bir tarihin gününü almak için Gün işlevini kullanırız.
moonToCheck = ay(Hücreler(i, 2).Value)
dayToCheck = gün(Hücreler(i, 2).Value)
aySonraki = ay(Hücreler(j, 2).Değer)
dayNext = gün(Hücreler(j, 2).Değer)
Örneğin: başlangıçta, i = 2 için; Bregje tarihi ve j = i + 1 = 2 + 1 = 3; Niels tarihi seçilecektir.
4. Tarihleri doğru bir şekilde sıralamak için ilk tarihi (monthToCheck ve dayToCheck) bir sonraki tarihle (ayNext ve dayNext) karşılaştırırız. Bir sonraki tarih 'düşük' ise, tarihleri ve isimleri değiştiririz. Aşağıdaki If Then ifadesini ekleyin.
Eğer (ayNext < monthToCheck) Veya (monthNext = ayToCheck Ve dayNext < dayToCheck) Sonra
Bitir
Yukarıdaki ifade doğruysa, tarihleri ve isimleri değiştiririz.
Örneğin: i = 2 ve j = 3 için Bregje ve Niels tarihi kontrol edilir. MonthNext = 6, monthToCheck = 2. moonNext, monthToCheck'ten daha yüksek olduğu için yukarıdaki ifade doğru değildir. 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 numarasına sahip olduğunu kolayca görebilirsiniz, bu yüzden bir sonrakine geçiyoruz. j = 5 ve j = 6 için aynı sonucu elde ederiz. j = 7'ye ulaştığımızda şu değişkenlere sahibiz: ayNext = 2 ve dayNext = 9. MonthToCheck = 2 ve dayToCheck = 12. Şimdi yukarıdaki ifade doğrudur. moonNext = monthToCheck ve dayNext (9) olduğundan, dayToCheck (12) öğesinden daha düşüktür.
5. Tarihleri değiştiriyoruz. Excel VBA'nın tarihleri doğru şekilde değiştirebilmesi için bir tarihi geçici olarak tempDate'e kaydederiz. If ifadesine aşağıdaki kod satırlarını ekleyin.
takas tarihleri
tempDate = Hücreler(i, 2).Value
Hücreler(i, 2).Değer = Hücreler(j, 2).Değer
Hücreler(j, 2).Value = tempDate
6. Aynı şeyi isimlerle de yapıyoruz. If ifadesine aşağıdaki kod satırlarını ekleyin.
isimleri değiş tokuş
tempName = Hücreler(i, 1).Value
Hücreler(i, 1).Değer = Hücreler(j, 1).Değer
Cells(j, 1).Value = tempName
7. İkinci For Next döngüsünü kapatıyoruz (If ifadesinin dışında).
sonraki j
i = 2 ve j = 7 için Excel VBA, tarihleri ve adları değiştirdi. Bu, Richard'ı ilk konumda ve Bregje'yi 7. konumda alacağımız anlamına gelir. Bu aynı zamanda, bir sonraki yinelememizin başlangıcında (i = 2 ve j = 8 için) yeni bir ToCheck ve dayToCheck aldığımız anlamına gelir. Şimdi Richard'ı Dineke (j = 8) ile karşılaştıracağız. Richard'ın 'daha düşük' bir tarihi olduğu için bu tarihleri ve isimleri değiştirmeye gerek olmadığını kolayca görebilirsiniz. Nitekim Richard'ı (i = 2) yerine Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John ( j= 12) ve Debby (j) koymaya gerek yoktur. = 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' tarihi alacaktır. İkinci konumda ikinci 'en düşük' tarihi almak için, Excel VBA, i = 3 için aynı adımları tekrarlar. Üçüncü konumda üçüncü 'en düşük' tarihi almak için, Excel VBA, i = 4 için aynı adımları tekrarlar, vb.
8. İlk For Next döngüsünü kapatın (If ifadesinin dışında).
sonraki ben
9. Programınızı test edin.
Sonuç: