Müsait olunan günlerin seçilmesi

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Merhaba Arkadaşlar,
Örnek dosyada anlattım. K sütunundakilerin seçilen günleri L sütununa yazılacak.
Saygılarımla
 

Ekli dosyalar

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Oluşturmaya çalıştığınız sonuç listesi hangisidir?
C-H aralığı mı?
C-H aralığını siz elle mi yazıyorsunuz?
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Merhaba,
Örneğin K1 hücresinde B03 var. L1 e 3, 4, 5, 7 den biri gelecek
K2 hücresinde E03 var. L2 e 1, 3, 6 dan biri gelecek
Saygılarımla
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
A5 de D var
B5 de 4 var
C-H aralığında sadece ilk 3 gün doldurulmuş
Aynı durrum 6. ve 10. satırlarda da var.
Bu kısmı anlamadım.
Siz K sütunundaki değerleri Elle mi doldurdunuz?
Bazalınacak verileriniz hangisi?
C-H aralığındaki sayılarla sarı renklileri örtüştüremedim.
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Baz alınacak veriler K sütunundakiler, alınacak değerler random olarak C:H arasındakiler L sütununa yazılacak
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
#4 nolu mesajımdaki hatalı verilerinizden ötürü yapacağım liste hata verecektir.
C-H aralığını mu sarı K sütunundaki verilerinize uyduracaksınız? Yoksa K sütunundaki verilerinizi mi düzelteceksiniz?
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın Hocam,
Tam teşekküllü bir örnek hazırlıyorum, az sonra yükleyeceğim.
Saygılarımla
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın Hocam,
Geciktiğim için kusura bakmayın lütfen, iki noktayı atlamışım. İlk gün 4 olacak her gün bir öğretmen derse gelecek. 30 gün seçimlik olduğu için C:H arası 27 gün gözüküyor. Umarım problemim çok sıkıntılı değildir.
Saygılarımla
 

Ekli dosyalar

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Aşağıdaki kodları bir modüle ekleyip sayfa üzerinde çalıştırabilirsiniz.
C++:
Sub x1()
    Dim Say As Integer, i As Integer, k As Integer
    Dim Dizi, Hoca, Dersler
    Dizi = Range("K1:L" & Range("K1").End(xlDown).Row).Value
    Hoca = Range("A2:I" & Range("A2").End(xlDown).Row).Value
    Set Dersler = CreateObject("Scripting.Dictionary")
    For i = LBound(Hoca, 1) To UBound(Hoca, 1)
        Say = 0
        For k = 3 To 9
            If Hoca(i, k) > 0 Then
                If Dersler.Exists(Hoca(i, 1)) Then
                    Dersler(Hoca(i, 1)) = Dersler(Hoca(i, 1)) & "//" & Hoca(i, k)
                Else
                    Dersler.Add Hoca(i, 1), Hoca(i, k)
                End If
            End If
        Next k
        If Not Dersler.Exists(Hoca(i, 1)) Then Dersler.Add Hoca(i, 1), "Yok"
    Next i
    ReDim Liste(1 To UBound(Dizi, 1), 1 To 2)
    For i = LBound(Dizi, 1) To UBound(Dizi, 1)
        Liste(i, 1) = Dizi(i, 1)
        Part1 = Left(Dizi(i, 1), Len(Dizi(i, 1)) - 2)
        Part2 = Right(Dizi(i, 1), 2) * 1
        Bul = Split(Dersler(Part1), "//")
        If Bul(0) = "Yok" Then Liste(i, 2) = "Hata": GoTo Devam1
        If UBound(Bul) = 0 Then Liste(i, 2) = Bul(0): Dersler(Part1) = "Yok": GoTo Devam1
        Ara = WorksheetFunction.RandBetween(0, UBound(Bul))
        Liste(i, 2) = Bul(Ara)
        Say = 0
        For k = 0 To UBound(Bul)
            If k <> Ara Then
                If Say = 0 Then
                    Dersler(Part1) = Bul(k)
                    Say = Say + 1
                Else
                    Dersler(Part1) = Dersler(Part1) & "//" & Bul(k)
                End If
            End If
        Next k
Devam1:
    Next i
    Range("K1").Resize(UBound(Liste), 2) = Liste
End Sub
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın ÖmerFaruk Hocam,
Elinize sağlık, ilginize çok teşekkür ederim. Galiba tam doğru anlatamamışım. Ay içinde gün sırası değişmez, kişilerin sıralaması belirtilen günlere göre değişiklik gösterebilir. Sayılar tutuyor. Başka örnekte denemedim ama.
Saygılarımla
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Dosyanızda yazdığınız kriterlere göre yaptım.
İlave bir şeyler diyorsunuz. Ay içinde gün sırası değişmez mesela.
Dosyanızda yada önceki mesajlarınızda herhangi bir tarih-ay-ya da bununla alakalı bir açıklama göremiyorum.

Sorunuzu tekrar gözden geçirip, kriter-kısıt-isteklerinizi doğru ve eksiksiz ifade edebilirseniz yine yardımcı olmaya çalışırım.
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın ÖmerFaruk Hocam,
İlginize tekrar çok teşekkür ederim. Sanırım şimdi konu daha anlaşılır oldu. Lütfen kusuruma bakmayın.
Saygılarımla
 

Ekli dosyalar

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Sanırım bu sefer doğru anladım.

Dosyanızda F sütununda D-E-I için mükerrer gün girmişsiniz. Ben değiştirdim.
Nöbet çizelgesi olduğu için 1 ay öncesinden 12 ay sonrasına kadar ayları içeren Userform oluşturdum.
Kodlar içinde Dictionary Dictionary yapısını kullandım. Kodlar gereksiz yere uzamasın diye içiçe çalışan dictionary ile dinamik bir yapı kurduk.

Unutulmaması gereken bir husus, kodlarda Early Binding metodu uyguladığım için VBA / Tools / Reference kısmında Microsoft Scripting Runtime seçili olmalııdr.

Eğer eksik nöbet günü varsa onları ay sonuna doğru denk geldiği haftanın gününde belirtiyorum ki C-I aralığınızda hatalı veri girişiniz varsa kontrol edebilin.

Dosyayı olduğu gibi paylaşıyorum.
 

Ekli dosyalar

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın Ömer Faruk Hocam,
Şimdi gördüm, çok teşekkür ederim. Düşündüğümden de çok farklı olmuş. Bir kaç farklı deneme yapayım. Makroyu anlamaya çalışayım. Sonrasında sizi bilgilendireyim. Belirttiğiniz yöntemi daha önce duymamıştım bile. Sitemizin en muhteşem noktası da bu, bana göre, insan her gün öğrenecek yeni bir nokta buluyor. Bu belki Excel'in belki de, Excel ile iş yapmaktan hoşlananların gönül zenginliği. Her ikisi de insanı mutlu ediyor. Size ve sitenin yaşatılmasında emeği geçen arkadaşlara çok teşekkür ederim.
Saygılarımla
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Kendi adıma eyvallah.
Sitenin yaşatılmasında emeği geçenlere ben de teşekkür ederim.

Olayın özü şu.
Dictionary içindeki her bir KEY için ITEM olarak bir dictionary daha tanımlıyorum..
Bir Combodan İl seçince diğerinde o ile ait ilçelerin seçilebilmesi gibi bir şey.
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın Ömer Faruk Hocam,
Bu çalışmaya üniversitedeki bir arkadaşımın ricası üzerine başladım. Sayenizde çözebileceğimi de düşünüyorum. Dün 5-6 örnek hazırladım. Hep aynı yerde hata veriyor. Belki ben hata yapıyorum. Bilemedim. Bu çalışmada UserForm'a da gerek yok. Çünkü birden çok dağıtım peş peşe olacak ve bölüme göre de birleştirilecek. Hazırlık yapıldığında farklı sayfalardan kopyala yapıştır, makroyu çalıştır, sonucu getir, yenisini yap ... gibi döngü ile çözüm elde edilir. Bir kişi en çok kaç nöbet alabilir? sorusu da sanırım 10 ya da 12 ile sınırlanabilir. Bu da dağıtımı K sütununda yapacağımıza P sütununa kaydırabiliriz gibi düşünülebilir.
Yardımcı olursanız çok makbule geçer. Bu vesile ile 29 Ekim Cumhuriyet Bayramımızı ve 100. Yılımızı Kutlarım.
Saygılarımla
 

Ekli dosyalar

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Size 13 nolu mesajda bahsettiğim hatada ısrar ediyorsunuz.
Mesela F5 de D hocası var
J5 ve K5 de mükerrer olarak haftanın 4.günü seçilmiş.
Hatanızın sebebi bu.

Ayrıca bu gönderdiğiniz dosya da aylar B1-W1-... gibi 12 ay için mi gidecek?
Eğer öyleyse, yernizde olsam
Ekteki gibi bir sayfada nöbetleri tanımlarım.
Kontrolü gerçekleştiririm.
Sonra makro ile bir başka sayfada listeleri yaparım.
 

Ekli dosyalar

Son düzenleme:

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Sayın Hocam,
Bu söylediğiniz 1. örnekte, Orada B sütunu çözümün ne olduğunu gösteriyor. G5 te de 4. gün var. Diğer örneklerde de ilk sütun çözüm. (Ekli dosyada sadece tarihler sıraya dizildi)
Saygılarımla
 

Ekli dosyalar

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Hala aynı hatayı söylüyorum
J5 ve K5 de yani D öğretmenine ait 3.ve 4. tercihlerde 4.gün mükerrer seçilmiş.
J6 ve K6 de yani E öğretmenine ait 3.ve 4. tercihlerde 3.gün mükerrer seçilmiş.
I10 ve K10 da yani I öğretmenine ait 2.ve 4. tercihlerde 2.gün mükerrer seçilmiş.

Bir önceki mesajımda attığım örnek tablo gibi bir tablo yaparsan bu hatanın da önüne geçersiniz.
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Muhterem Hocam,
İlginiz ve sabrınız için çok teşekkür ederim. Örnek dosyam uygulanmış listeden isimler kaldırılarak oluşturulmuştur. Dolayısiyle listelerde hata yoktur. Tarih sırası kontrol edildiğinde de bu açık olarak görülür. Aynı lafları tekrarlamaya da gerek yok. Umarım çözüm bulurum.
Saygılarımla
 
Üst