1 sayfadan 1. sayfa

Fazla Mesailerin Rastgele Seçilen Günlere Kopyalanması

İletiTarih: 07 Kas 2020 12:52
seven58
Herkese Merhabalar,

Ekte örnek dosyada görüldüğü üzere 2 tablom var bu tablolardan birincisinde çalışanların fazla mesai saatlerinin kaç güne dağıtılacağı yer almaktadır. Bu tabloda yazan mesai saatlerinin dağıtılacak gün sayısına göre 2. tabloya kopyalanması gerekmektedir. Forumlarda uzun süredir araştırıyorum ancak tam olarak ihtiyacımı karşılayacak bir örnek bulamadım. Bu konuda yardımcı olabilirseniz çok sevinirim.

Not: Ekte tam olarak ne yapmak istediğimi açıklayan bir de görsel ekledim.

Şimdiden yardımcı olabileceklere teşekkür eder, iyi günler dilerim.

Cevap: Fazla Mesailerin Rastgele Seçilen Günlere Kopyalanmas

İletiTarih: 07 Kas 2020 16:51
Ömer BARAN
Merhaba.

Sayfaya ekeyeceğiniz bir düğmeyle aşağıdaki kodu ilişkilendirerek kullanabilirsiniz.

Kod: Tümünü seç
Sub MESAI_DAGIT()
Range("J3:J" & Rows.Count).ClearContents
For XD = 3 To Cells(Rows.Count, 1).End(3).Row
    tc = Cells(XD, 1): XDadet = Cells(XD, 3)
    ilk = WorksheetFunction.Match(tc, [G:G], 0)
    If WorksheetFunction.CountIf([G:G], tc) = 0 Then GoTo 20
    If WorksheetFunction.CountIf([G:G], tc) < XDadet Then _
        XDadet = WorksheetFunction.CountIf([G:G], tc)
    For gXD = 1 To XDadet
10:     Randomize: XDkrt = Int(Rnd() * (WorksheetFunction.CountIf([G:G], tc)))
        If Cells(ilk + XDkrt, "J") <> "" Then GoTo 10
        Cells(ilk + XDkrt, "J") = Cells(XD, 4)
        Cells(ilk + XDkrt, "J").NumberFormat = Cells(XD, 4).NumberFormat
    Next
20: Next
MsgBox "İşlem tamamlandı.." & vbLf & "Www.ExcelDestek.Com", vbInformation, "::.. Ömer BARAN ..::"
End Sub

.

Cevap: Fazla Mesailerin Rastgele Seçilen Günlere Kopyalanmas

İletiTarih: 07 Kas 2020 17:32
seven58
Ömer Bey, Tam istediğim gibi olmuş. Yardımınız için çok teşekkür ederim.

Cevap: Fazla Mesailerin Rastgele Seçilen Günlere Kopyalanmas

İletiTarih: 09 Kas 2020 13:32
seven58
Merhabalar,

Mesai saatlerini rastgele değil de sadece "Gündüz" yazan sütunlara yine dağıtılacak gün sayısına göre nasıl dağıtabilirim? Bu konuda yardımcı olabilir misiniz?

İyi günler dilerim

Cevap: Cevap: Fazla Mesailerin Rastgele Seçilen Günlere Kopy

İletiTarih: 09 Kas 2020 13:33
seven58
seven58 yazdı:Merhabalar,

Mesai saatlerini rastgele değil de sadece "Gündüz" yazan sütunlara yine dağıtılacak gün sayısına göre nasıl dağıtabilirim? Bu konuda yardımcı olabilir misiniz?

İyi günler dilerim


Örnek doysa ektedir.

Cevap: Fazla Mesailerin Rastgele Seçilen Günlere Kopyalanmas

İletiTarih: 22 Kas 2020 01:23
Ömer BARAN
Tekrar merhaba.

Son sorunuz biraz garip geldi (Gündüz kelimesini yazmak yerine doğrudan saati yazabilirdiniz).
Ama "vardır bir bildiğiniz diye düşünerek kod cevabını vereyim.
G sütununun sıralı olduğu (aynı TC Kimlik numaraları art arda sıralanmış) varsayıldı.

Aşağıdaki kod, C sütunundaki sayı, ilgili kişinin G sütunundaki TC adeti, ve J sütunundaki kişiye ait kısımdaki "Gündüz" adetinden
en küçüğü hangisiyse o adette olmak üzere; J sütununda "Gündüz" yazılı hücreler içinden rastgele hücreye ilgili saati yazar.

Kod: Tümünü seç
Sub MESAI_DAGIT_GUNDUZ()
For XD = 3 To Cells(Rows.Count, 1).End(3).Row
    tc = Cells(XD, 1): XDadet = Cells(XD, 3)
    ilk = WorksheetFunction.Match(tc, [G:G], 0)
    adet = WorksheetFunction.CountIf([G:G], tc)
    Gadet = WorksheetFunction.CountIf(Range("J" & ilk & ":J" & ilk + adet - 1), "Gündüz")
    If WorksheetFunction.CountIf([G:G], tc) = 0 Then GoTo 20
    adetJ = WorksheetFunction.Min(XDadet, adet, Gadet)
    For gXD = 1 To adetJ
10:     Randomize: XDkrt = Int(Rnd() * (adet))
        If Cells(ilk + XDkrt, "J") <> "Gündüz" Then GoTo 10
        Cells(ilk + XDkrt, "J") = Cells(XD, 4)
        Cells(ilk + XDkrt, "J").NumberFormat = Cells(XD, 4).NumberFormat
    Next
20: Next: MsgBox "İşlem tamamlandı ..", vbInformation, "::.. Ömer BARAN ..::"
End Sub

.