Excel ile Tercih Robotu Hazırlama

  • Konuyu başlatan Konuyu başlatan Betul14
  • Başlangıç tarihi Başlangıç tarihi
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Katılım
28 Tem 2022
Mesajlar
7
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
tercih robotu yapmak istiyorum.1 kişi 30 tercih yapacak.KPSS tercihlerinden önce boşa tercih yapmamak için hazırlamak istiyoruz arkadaşlarımla

Yapmak istediğimi şöyle açıklayayım. Veri sayfasına verileri yükledim. Kontenjan sayfasına da illerin kontenjanlarını yükledim. Sonuç sayfasında ise tercihlere yerleşen kişilerin isimleri, puanları ve tercihleri yazacak.
Mantığımız şu: veri listesindeki en yüksek puanlı kişiyi 1. tercihine yerleştiriyoruz. Sonra ikinci en yüksek puanlı kişiyi ele alıyoruz. 1. Tercihine bakıyoruz kontenjan varsa 1. tercihine yerleştiriyoruz. Yer yoksa 2. Tercihine yerleştiriyoruz. Sonra üçüncü en yüksek puanlı kişiye geçiyoruz bu şekilde bütün tercih yapan kişilerin tercihlerini puan üstünlüğüne göre değerlendiriyoruz. Eğer kişiye sıra geldiğinde yapmış olduğu bütün tercihler dolduysa o kişinin tercih bölümünde “ yerleşemediniz” yazısı yazacak.


*** - Ücretsiz, Hızlı ve Kolay Dosya Paylaşımı bunun gibi ama burda 5 tercih var ve 30 a nasıl çıkaracağımı bilmiyorum
 

Ekli dosyalar

Çözüm
Estağfurullah.
İşlem tamam dediğinize göre; finali, açıklamalarım doğrultusunda oluşturduğum (birkaç sürpriz ekleme var) belge ile yapayım.
Forumda daha sık ve uzun süreler çevrimiçi kalmanız ve çevrenizdeki Ms.Excel kullanıcılarını forumumuzdan haberdar/tavsiye etmeniz ricasıyla
iyi çalışmalar, başarılar, bol şans dilerim.

Sonradan eklenen not: (09.02.2020 14:30)
Belgede, tercih sayısı artırılmak isteniyorsa;

TEMIZLE isimli makro kodun aşağıdakiyle değiştirilmesi gerekecektir.
Belgeyi yenilemek yerine bu mesajı yazayım dedim.



CSS:
Sub TEMIZLE()
Set v = Sheets("veri sayfası")
Sheets("sonuçlar").Range("B2:J" & Rows.Count).Clear
vsonsut = v.Cells(1...
Merhaba.
Hangi sınav için bir hazırlık yapıyorsunuz acaba?

Listenizi kendinizin puan kriterine göre sıraladığınız varsayımıyla ve puan eşitliği halinde listedeki satır numarası ikincil kriter olmak üzere;
aşağıdaki kod istenilen sonucu verecektir.
CSS:
Sub TERCIH()
Set v = Sheets("veri sayfası"): Set k = Sheets("kontenjanlar"): Set s = Sheets("sonuçlar")
s.Range("B2:F" & Rows.Count).ClearContents
Application.Calculation = xlCalculationManual
sonsut = v.Cells(1, Columns.Count).End(xlToLeft).Column
sonsat = v.Cells(Rows.Count, "A").End(3).Row
alan = Range(Cells(2, "A"), Cells(sonsat, sonsut)).Address
v.Range(alan).Sort v.[B1], 2
For sat = 2 To v.Cells(Rows.Count, "B").End(3).Row
    s.Cells(sat, "B") = v.Cells(sat, "A"): s.Cells(sat, "D") = v.Cells(sat, "B")
    For sut = 3 To sonsut
        Set kont = k.[B:B].Find(v.Cells(sat, sut))
        If Not kont Is Nothing Then
            dolu = WorksheetFunction.CountIf(s.Range("F2:F" & sat), k.Cells(kont.Row, "B"))
            If k.Cells(kont.Row, "C") - dolu > 0 Then
                s.Cells(sat, "F") = k.Cells(kont.Row, "B")
                kon = Empty: kalan = 0: GoTo 10
            Else: s.Cells(sat, "F") = "YERLEŞEMEDİNİZ"
            End If
        End If
    Next
10: Next
Application.Calculation = xlCalculationAutomatic
MsgBox "Yerleştirme işlemi tamamlandı, hayırlı olsun..", vbInformation, "..:: Ömer BARAN ::.."
End Sub
 
Ben diyetisyenim önümüzdeki günlerde kpssden tercih yapacaz önümüzdeki yüksek puanli kisilerle ayni yerleri yazip tercihimizin boşa gitmesini istemiyoruz tercih robotu olusturalim herkes tercih edecegini yerleri yazsin yerlesip yerlesemiyecegimizi görmek istiyoruz. @Ömer BARAN
 
Puanları yazıp kodu çalıştırırsanız istenilen sonuç alınır.
Dikkat edeceğiniz kısım TERCİH kelimelerinin yazıldığı 1'inci satırda sağ tarafta başka (TERCİH içermeyen) veri olmaması.
Kontrol edilecek sütun sayısı kod tarafından tespit edilir, 1'inci satırdaki son dolu hücrenin sütununa kadar kontrol mevcut, 5 ise 5, 30 ise 30 sütun kontrol edilir.

İşlem adımları:
-- sonuçlar isimli sayfaya bir adet şekil/metin kutusu/düğme ekleyin,
-- ALT+F11 tuşlarına basın, karşınıza gelecek VBA ekranında üst menüden INSERT>>MODULEyi seçin,
-- aynı ekranda sağ taraftaki boş alana verdiğim kod blokunu yapıştırarak VBA ekranını kapatın,
-- sayfaya eklediğiniz metin kutusu/şekil/düğmeye fareyle sağ tıklayıp MAKRO ATAyı seçin,
-- karşınıza gelecek küçük ekranda TERCIH isimli makronun adını seçerek işlemi onaylayın.
Artık sayfaya eklenen şekil/metin kutusu/düğmeye fareyle tıkladığınızda kod gereken işlemi yapacaktır.
 
@Ömer BARAN yardımınız için teşekkür ederim ben beceremedim bir türlü dediiklerinizi yaptım düğmeye tıkladığımda error yazısı geldiGaliba makro kaydetmem gerekiyordu.Ama nasıl kaydedeceğimi bilemedim.makro kaydet sekmesine basdım .daha sonra tercihleri yazdım makro durdur tuşuna bastım ama sonuçlarda istediğim gibi yerleşilen şehir yada yerleşemediniz yazısı çıkmadı Dosyayı .bilgisyara kaydettim terkrar açtığımdada makro bu çalışma dosyasına yok yazısı geldi. bu seferde
 
Konu üzerinde bende bir çalışma yapmıştım, Ömer Bey konuyu cevaplayınca bende cevap vermedim. Alternatif olarak ekli dosyayı deneyin.

VBA:
Sub exceldestek()
Application.ScreenUpdating = False
    Dim veri As Worksheet: Dim kont As Worksheet: Dim sonuc As Worksheet
    Set veri = Worksheets("veri sayfası")
    Set kont = Worksheets("kontenjanlar")
    Set sonuc = Worksheets("sonuçlar")
        Set con = CreateObject("Adodb.Connection")
        Set rs = CreateObject("Adodb.Recordset")
            kont.Columns(3).Copy kont.Columns(4)
            con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
            ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=no"""
                sorgu = "select * from [" & veri.Name & "$A2:AF] where f1 is not null order by f2 desc "
                rs.Open sorgu, con, 1, 1
                    If rs.RecordCount > 0 Then
                        sonuc.Range("A2:F" & veri.Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
                        sat = 2
        Do While Not rs.EOF
            sonuc.Cells(sat, 2) = rs("f1").Value
            sonuc.Cells(sat, 4) = rs("f2").Value
                For sut = 3 To 32
                    tercih = rs("f" & sut).Value
                    If tercih = "" Then Exit For
                        Set kt = kont.Range("B2:B" & kont.Cells(Rows.Count, 2).End(xlUp).Row).Find(tercih)
                            If Not kt Is Nothing Then
                                If kont.Cells(kt.Row, 4) >= 1 Then
                                    sonuc.Cells(sat, 6) = tercih
                                    kont.Cells(kt.Row, 4) = kont.Cells(kt.Row, 4) - 1
                                    Exit For
                                Else
                                    sonuc.Cells(sat, 6) = "Yerleşemediniz"
                                End If
                            End If
                    kt = Empty
                Next
    sat = sat + 1
        rs.movenext
        Loop
                    End If
            rs.Close: con.Close
        Set rs = Nothing: Set con = Nothing
    MsgBox "İşlem tamam...." & vbNewLine & vbNewLine & WorksheetFunction.Sum(kont.Columns(4)) & " Kontejan boş kaldı", vbInformation, "metehan8001"
Application.ScreenUpdating = True
End Sub
 

Ekli dosyalar

Sayın @metehan8001 'in gönderdiği belgeyi incelemedim (mutlaka sorunsuzdur) .

Benim tarzım; mümkün olduğunca, çözümün uygulandığı belge ekleyip "belgeniz ekte" cümleciğinden ibaret cevap vermek yerine,
konu sahibinin örnek belgesine göre oluşturulan çözümü mümkün olduğunca detaylı tarif etmek yönündedir.
(Sanıyorum tek atladığım husus; belgenin MAKRO İÇEREN belge türünde veya xls uzantılı kaydedilmesi gerekliliğini hatırlatmamış olmam.)

Bu tarzdaki amacım da; hem soruyu soranı, hem de konu sayfasını ziyaret edecek üye ve ziyaretçilerini öğrenmeye sevk etmek,
tecrübelerinin artmasına katkıda bulunmaktır.

Malesef hiç hazzetmediğim durum ise; örnek belge ile gerçek belgenin yapılarının farklı olmasından kaynaklanan
(gerçek ibaresi yine yanlış olabilir, konu sahibinin o sırada belgesinde yapacağı keyfe keder tasarımsal her değişiklik, bir sonraki mesaj ile yine değişebilir)
ve sonunun ne zaman geleceği belli olmayan değişikliklerin tümünü karşılamaya çalışmaktır.

İşte bu nedenlerle, cevaplarımın altındaki İMZA bölümü, biraz uzun ve detaylıdır. Cevabımın altındaki İMZA bölümünü okuyunuz.

Verdiğim kodlar ve yaptığım uygulama tarifi; konu açılış mesajınıza eklenen örnek belgeye göre yani,
o belgedeki sayfa isimleri, sayfaların satır/sütun yapılarına göredir ve sorunsuzdur.

Ez cümle; soru sormak zor zanaat vesselam.
.
 
@Ömer BARAN ilk attığım dosyada sizim anlattığınız şekilde yapyım çalıştı çok teşekkür ederim başka dosyada uygulamak benim hatamdı özür dilerim kusura bakmayın.
Estağfurullah, özürlük bir şey yok, olur mu öyle şey. Tecrübedir netice itibariyle.
Amacım, konu sayfasını inceleyecek üyelere soru sorarken eklenen belgenin önemini anlatmaktı.

Ayrıca gönderdiğim kod cevabında, işlemin daha iyi anlaşılmasını temin etmek üzere küçük güncelleme ve
veri sayfasındaki listenin puana göre sıralanması için birkaç satır ilave de yaptım (puana göre sıralama yapmadan da kullanabilirsiniz)

Sayfayı yenileyerek önceki cevabımı tekrar kontrol edip, kod'un yeni halini, ilk örnek belgenizdeki sayfa ve tablo yapılarına göre sorunsuz kullanabilirsiniz.
.
 
Estağfurullah.
İşlem tamam dediğinize göre; finali, açıklamalarım doğrultusunda oluşturduğum (birkaç sürpriz ekleme var) belge ile yapayım.
Forumda daha sık ve uzun süreler çevrimiçi kalmanız ve çevrenizdeki Ms.Excel kullanıcılarını forumumuzdan haberdar/tavsiye etmeniz ricasıyla
iyi çalışmalar, başarılar, bol şans dilerim.

Sonradan eklenen not: (09.02.2020 14:30)
Belgede, tercih sayısı artırılmak isteniyorsa;

TEMIZLE isimli makro kodun aşağıdakiyle değiştirilmesi gerekecektir.
Belgeyi yenilemek yerine bu mesajı yazayım dedim.



CSS:
Sub TEMIZLE()
Set v = Sheets("veri sayfası")
Sheets("sonuçlar").Range("B2:J" & Rows.Count).Clear
vsonsut = v.Cells(1, Columns.Count).End(xlToLeft).Column
vsonsat = v.Cells(Rows.Count, 1).End(3).Row
v.Range(v.[C2], v.Cells(vsonsat, vsonsut)).Interior.Color = xlNone
Sheets("kontenjanlar").Range("D2:D" & Rows.Count).Clear
Sheets("sonuçlar").Activate
End Sub
 

Ekli dosyalar

Çözüm
2020 yılı üniversite tercih döneminde kullanabileceğiniz bir belge, aşağıdaki konu sayfasında yer alıyor.
İlgileneceklerin dikkatlerine.

 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Benzer Konular Popüler İçerikler Daha Fazlası
Geri
Üst Alt