• Foruma hoş geldin 👋 Ziyaretçi

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Soru Sınıf için nöbet programı vba kodu

hausdorf

Yeni Üye
Kullanıcı Bilgileri
Aktiflik
Çevrimdışı
Katılım
29 Haz 2024
Mesajlar
11
Aldığı beğeni
0
Excel V
Office 2016 TR
Konuyu Başlatan
Herkese merhaba. Sınıf için nöbet programı oluşturmaya çalışıyorum.
İstediğim tarih aralığını girip tarih listesini oluşturabiliyorum (tatilleri liste dışı bırakacak şekilde).
Öğrencileri e-okul sisteminden aldıktan sonra düzenli bir liste haline getirecek vba kodunu da oluşturdum Sayfa1'de.
Eklediğim fotoğrafta görüldüğü gibi "A" sütununda tarihler, "B" ve "C" sütunlarında öğrenci isimleri listelenecek. Yani her gün 2 öğrenci nöbetçi olacak.
Ayrıca öğrenciler listede kendisinden sonra (ya da önce) gelen öğrenciyle nöbet tutacak (sıralı şekilde yani). "L" sütununda öğrenci isimleri 1. satırdan başlayacak şekilde yazıyor.

Burada iki sorun oluyor.
1) Öğrenci sayısı çift olduğunda liste rahat bir şekilde oluşuyor. Bir sorun yaşanmıyor. Ancak öğrenci sayısı tek olduğunda listenin son sırasındaki öğrenci "B" sütununda yalnız kalıyor. "C" sütununda yanında bir öğrenci ismi yazmadan alt satıra geçiyor.
Ben burada son öğrencinin yanında listenin ilk sırasında yazan öğrenciyi yazsın ve listeye bundan sonra da bu şekilde devam etsin istiyorum. Yani alt satırda listenin 2. ve 3. sırasında bulunan öğrenciler birlikte tutsun istiyorum.

2) Tarih aralığı olarak (sene başı-kasım tatili), (kasım tatili-ocak tatili) şeklinde 9'ar hafta gitmeyi planladığım için nöbet listelerinde son sırada kalan öğrenciden sonra diğer programda bir altında yer alan öğrenciden devam etsin istiyorum.

İlerleyen yıllarda kullanabileceğim bir şey istediğim için öğrenci sayısının tek veya çift olmasına göre kodlama yapmak istiyorum. Aşağıda yazmaya çalıştığım kodu paylaştım. Çok bilgi sahibi değilim. Elimden geldiğince işimi kolaylaştıracak işler yapmaya çalışıyorum. Yardımcı olabilirseniz çok sevinirim.


CSS:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 

Ekli dosyalar

  • 1.PNG
    1.PNG
    76.1 KB · Gösterim: 10
Şunu bir deneyin istediğiniz böyle birşeymi ?

Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 
Alternatif;
Bu kod tarihleri giriyor.
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
Bu kod nmbet giriyor. Öğrenci isimlerini 2. Satırdan başlatın. M sütununa x yazarak yardımcı sütun olarak kullanılıyor.
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 
Alternatif;
Bu kod tarihleri giriyor.
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
Bu kod nmbet giriyor. Öğrenci isimlerini 2. Satırdan başlatın. M sütununa x yazarak yardımcı sütun olarak kullanılıyor.
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
Hocam tarih kodu için çok teşekkür ederim. Onu excel içerisinde hallettim diye sormamıştım ama çok makbule geçti.

2. söylediğiniz kod için öğrenci listesini bir satır aşağıdan yani 2.satıra taşıdım ve M1 hücresine x yazdım. kodu çalıştırdığımda istediğim şekilde olmadı hatta araya boş hücreler bırakıp çok aşağıdaki satırdan yeniden yerleştirme yaptı.
 
Hocam kodu çalıştırdığımda sadece ilk sıradaki öğrencileri bütün hücrelere yazıyor
J sütununda sıralama rakamları var değil mi? Kod kişi sayısını oradan alıyor
 
J sütununda sıralama rakamları var değil mi? Kod kişi sayısını oradan alıyor
Aslında kod kişi sayısını Sayfa1'den alıyor. Sayfa1'de başka bir vba kodu var. e-okul'dan sınıf listesi aldığımızda arada boş satırlar ve sütunlar oluyor. Onları silip düzenli bir liste haline getiren bir vba kodu yazdım. Bu listeyi vba kodu olmadan excel içinde yazdığım bir kodla Sayfa2'ye taşıdım.

Bunun için de makro kodu yazabilirdim elbette ama bu basit iş diye sonraya bıraktım

Sayfa2'nin J sütunu sadece sıra numaraları
 
Aslında kod kişi sayısını Sayfa1'den alıyor. Sayfa1'de başka bir vba kodu var. e-okul'dan sınıf listesi aldığımızda arada boş satırlar ve sütunlar oluyor. Onları silip düzenli bir liste haline getiren bir vba kodu yazdım. Bu listeyi vba kodu olmadan excel içinde yazdığım bir kodla Sayfa2'ye taşıdım.

Bunun için de makro kodu yazabilirdim elbette ama bu basit iş diye sonraya bıraktım

Sayfa2'nin J sütunu sadece sıra numaraları
Kod sayfa 1 in j sütununa bakıyor
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
Düzeltip deneyin. Yine olmadı derseniz örnek dosya yükleyin
 
Kod sayfa 1 in j sütununa bakıyor
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
Düzeltip deneyin. Yine olmadı derseniz örnek dosya yükleyin
Hocam çok teşekkür ederim Allah razı olsun. Tam istediğim şekilde oldu.

Sorunun en başında yer alan 2. soru için de bir yönteminiz var mı acaba

Yani ben ilk başta 09/09/2024 - 08/11/2024 tarihleri arası için bir nöbet çizelgesi oluşturacağım. Haliyle burada öğrenci sayısına bağlı olarak liste yarım kalacak. Tekrar 18/11/2024 - 17/01/2025 arası için liste oluşturduğumda tekrar listenin başından gelecek. Bu durumda listenin başındaki öğrenciler örneğin 4 defa nöbet tutarken alt taraftakiler 2 defa tutmuş olacak.

Bu adaletli olmayacağından 2. sefer oluşturacağım listenin önceki nöbet listesinin kaldığı öğrenciden devam etmesini istiyorum

Buna da yardımcı olabilir misiniz acaba
 
Bunu yapabilmemiz için tarihlerin devam etmesi yani önceki dönemi de görürsek kaldığı yerden devam ettirebiliriz
 
Yani ben ilk başta 09/09/2024 - 08/11/2024 tarihleri arası için bir nöbet çizelgesi oluşturacağım. Haliyle burada öğrenci sayısına bağlı olarak liste yarım kalacak. Tekrar 18/11/2024 - 17/01/2025 arası için liste oluşturduğumda tekrar listenin başından gelecek. Bu durumda listenin başındaki öğrenciler örneğin 4 defa nöbet tutarken alt taraftakiler 2 defa tutmuş olacak.
Sizin resimdeki hücre adreslerine göre kodlama yaptım, sorunsuz çalışıyor. X leri silmezseniz ikici tarih aralığında bir önceki tarihteki duruma göre devam eder örneğin birinci dönem son nöbet tutan öğrenciden sonrakiden itibaren devam eder.
Örnek dosya ekleyin, daha çabuk net sonuç alırsınız.
 
Deneyin
 

Ekli dosyalar

  • nöbet.xlsm
    19.1 KB · Gösterim: 3
Çözüm
Bunu yapabilmemiz için tarihlerin devam etmesi yani önceki dönemi de görürsek kaldığı yerden devam ettirebiliriz
Anladım hocam. Şimdilik bu da işimi görür. Söylediğim sorun için farklı bir çözüm denemeye çalışacağım. İlginiz için çok teşekkür ederim
 
İkinci tarih aralığını A sütunundaki birinci tarih aralığının altına yazmasını mı istiyorsunuz.
 
İkinci tarih aralığını A sütunundaki birinci tarih aralığının altına yazmasını mı istiyorsunuz.
yok hocam yeni sıfırdan tarih aralıkları girip devam edecektim. Attığınız belgeyi de kontrol ettim. kendi belgeme de uyarladım. Şu an sorunsuz çalışıyor. Kendim birkaç modifikasyon yapacağım sadece. Tekrardan çok teşekkür ederim Allah razı olsun 🙏
 
Alt alta devam eden örnek.
 

Ekli dosyalar

  • nöbet.xlsm
    22.2 KB · Gösterim: 1
Alt alta devam eden örnek.
Hocam emeğiniz için çok teşekkür ederim. İlk gönderdiğiniz hali tam olarak istediğim şekli.

Konuyu önce çözüldü olarak işaretlediğim ve konu kapatıldı olduğundan tekrar yazamadım. Siteye yeni üye oldum. Tekrar mesaj yazabilmeyi geç çözebildim

Ancak şu anda farklı bir sorunum var. Ben işlemler görünür olsun diye sınıf listesini nöbet listesinin bulunduğu sayfaya konumlandırmıştım ancak aslında bahsettiğim gibi sınıf listesi Sayfa1'de yer alıyor. Attığınız listeyi Sayfa1'e göre değiştirmeye çalışıyorum ancak isim sütununun yanına x'leri atıyor ve listeyi sadece bir kez yazıyor.

Sayfa1'de
1.sütun = sıra numaraları
2.sütun = öğrenci numaraları
3.sütun = öğrenci isimleri şeklinde.

Ayrıca dediğiniz gibi listeyi 2.satırdan başlatıyorum yine.

Düzenlediğim kodu aşağıda paylaşıyorum. Bu konuda da yardımcı olursanız çok sevinirim

sontar = Sheets("kopya1").Cells(Rows.Count, 1).End(3).Row
For i = 5 To sontar
topogr = Sheets("Sayfa1").Cells(Rows.Count, 3).End(3).Row
If sonogr = topogr Then Sheets("Sayfa1").Columns(4).Clear
sonogr = Sheets("Sayfa1").Cells(Rows.Count, 4).End(3).Row + 1
Sheets("kopya1").Cells(i, 2).Value = Sheets("Sayfa1").Cells(sonogr, 3).Value
Sheets("Sayfa1").Cells(sonogr, 4).Value = "x"
If sonogr = topogr Then Sheets("Sayfa1").Columns(4).Clear
sonogr = Sheets("Sayfa1").Cells(Rows.Count, 4).End(3).Row + 1
Sheets("kopya1").Cells(i, 3).Value = Sheets("Sayfa1").Cells(sonogr, 3).Value
Sheets("Sayfa1").Cells(sonogr, 4).Value = "x"
Next
 
Artık x leri kullanmaya gerek olmadan çalışıyor. İkinci tarih aralığı girdiğinizde öğrenciler hemen silinmiyor, son girilen öğrenci adını aldıktan sonra silinip, isimler kaldığı yerden devam ediyor. Yani 2. Sayfaya siz müdahale etmeyin.
 

Ekli dosyalar

  • nöbet.xlsm
    22.2 KB · Gösterim: 3
Son düzenleme:
Artık x leri kullanmaya gerek olmadan çalışıyor. İkinci tarih aralığı girdiğinizde öğrenciler hemen silinmiyor, son girilen öğrenci adını aldıktan sonra silinip, isimler kaldığı yerden devam ediyor. Yani 2. Sayfaya siz müdahale etmeyin.
Hocam emeğiniz için çok teşekkür ederim ancak ben kendi belgemde birçok düzenleme renklendirme hizalama vs yaptım. Kodunuzu kendi belgeme alıyorum ancak sorun yaşıyorum. öğrencileri 1 kez yerleştiriyor ve duruyor.

Düzenlediğim kodu aşağıda veriyorum. Tek yaptığım şey sayfa1 yerine eokul sayfası gelecek ve sayfa2 yerine de nobet sayfası gelecek.

Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 
Geri
Üst