- Katılım
- 5 Mart 2008
- Mesajlar
- 896
- Excel Vers. ve Dili
- EV:EXCEL 2010-TÜRKÇE
İŞ:EXCEL 2010-TÜRKÇE
DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Sub Grupla()
Dim Veri, myDict As Object, myList
Veri = Range("B1").CurrentRegion.Value 'Mevcut verileri kopyalıyoruz
ReDim myList(1 To UBound(Veri) - 1, 1 To 1) 'Grupları yazacağımız liste boyutunu ayarlıyoruz
Set myDict = CreateObject("Scripting.Dictionary") 'Dictionary nesnesi tanımlıyoruz
MaxGrp = Int((UBound(Veri) - 1) / 4) 'Oluşabilecek maksimum grup numarasını buluyoruz
Grup = 1 'ilk grup nosunu manuel veriyoruz
For i = 2 To UBound(Veri) 'Dizideki verikeri Dictionary nesnesine kopyalıypruz
myDict.Add i - 1, Veri(i, 3) & " - " & i - 1
Next i
Do
Randomize 'Rastgele sayı üretim süreci başlangıcı
Sec = Int((myDict.Count * Rnd) + 1) 'grubun atanacağı öğrenci sırasını seçiyoruz
myList(myDict.Keys()(Sec - 1), 1) = Grup 'Listemize bu öğrencinin sırasına grup nosunu yazıyoruz
GrupSay = GrupSay + 1 '4 öğrenciden oluacaan gruplardaki öğrenci sayısını sayıyoruz
myDict.Remove myDict.Keys()(Sec - 1) 'atanan öğrenciyi dictionaryden siliyoruz
If GrupSay = 4 And Not Grup = MaxGrp Then 'Eğer öğrenci sayısı 4 ve son gruuba ulaşılmamışsa
GrupSay = 0 'Gruptaki öğrenci sayısını sıfırlıyor ve yeni grup numarası veriyoruz
Grup = Grup + 1
ElseIf GrupSay >= 4 Then 'Eğer son grup da dolmuş yani öğrenci sayısı grup sayısının 4 katından fazla ise
Randomize 'Kalan öğrencilerin her biri için mevcut gruplardan rastgele grup numarası seçiyoruz
Grup = Int((MaxGrp * Rnd) + 1)
End If
Loop Until myDict.Count = 0 'Do - Loop döngüsünde grup atanacak öğrenci kalmamışsa sonlandırıyoruz
Range("D2").Resize(UBound(Veri) - 1, 1) = myList 'Grup listesini sayfaya D sütununa yazıyoruz
End Sub