Skip to main content

AccessTr.neT


Belirti Kurala Bağlı Mesai Dağılımı

Belirti Kurala Bağlı Mesai Dağılımı

#19
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xStun As Range
Dim xSay, xSatir As Long
Dim xOran, xMesai, y As Integer
Dim sBolge As String
Dim xDizi() As String

Set xStun = Range("AK:AK")

If Not Application.Intersect(xStun, Range(Target.Address)) Is Nothing Then
   
    If Target.Value Mod 3 <> 0 Then
        MsgBox ("Mesai saati 3'ün tam katı değil")
        Exit Sub
    End If
   
    sBolge = ""
    xMesai = Target.Value / 3
    xSatir = Target.Row + 1
    xSay = Application.WorksheetFunction.CountIf(Range("D" & xSatir & ":Ah" & xSatir), "X")
 
    If Round(xSay / 3) < xMesai Or xMesai * 3 > 21 Then
        MsgBox ("mesai saati ( " & xMesai * 3 & " saat) çalıştığı günle ( " & xSay & " gün ) orantılı degil yada 21'den fazla. Mesai saatini düzeltin")
        Exit Sub
    End If
    Range("D" & xSatir - 1 & ":Ah" & xSatir - 1).ClearContents

    For x = 4 To 34
        If Cells(xSatir, x).Value = "X" Then sBolge = sBolge & "," & x
    Next x

    Do While xMesai > 0
     
        sBolge = Mid(sBolge, 2)
        xDizi = Split(sBolge, ",")
        xOran = Application.WorksheetFunction.RoundUp(xSay / xMesai, 0)

        For x = 0 To UBound(xDizi) Step xOran
            Cells(xSatir - 1, CLng(xDizi(x))).Value = 3
            xMesai = xMesai - 1
            xSay = xSay - 1
        Next x
        sBolge = ""
        For x = 4 To 34
            If Cells(xSatir, x).Value = "X" And Len(Trim(Cells(xSatir - 1, x))) = 0 Then sBolge = sBolge & "," & x
        Next x
        If Len(Trim(sBolge)) = 0 Then Exit Do
       
    Loop
End If
End Sub
Kodu yukardakiyle değiştirip dener misiniz?
Cevapla
#20
Merhaba

Gönderdiğiniz kod ile 3-3-3 yazdı Sorunsuz bir şekilde bu 21 saat mesai yi çalıştığı güne bölemezmiyiz mesela Personel 12 gün çalışmış bu günlere 3-3-3-3  olma şansı var mı?
Cevapla
#21
(28/11/2019, 16:47)ByChilavert yazdı: Bu 21 saat mesai yi çalıştığı güne bölemezmiyiz mesela Personel 12 gün çalışmış bu günlere 3-3-3-3  olma şansı var mı?
anlamadım zaten 3 lü olarak çalıştığı günlere dağıtmıyor mu?
Cevapla
#22
Dilelim ki mesai=3 bu tek değeri ay ortasında bir yere mi alacak
Ya 6 girerseniz başa ve sona mi alacak, basa ve ortaya mi yoksa ay içinde dileyelim ki 10. ve 20. günler civarına mi?
3 ve sonrası için mantık nispeten ayni ama bu 3 durum için ayrı ayri kontroller, kodlar yazıp işlemi iyice karıştırmak var.
Cevapla
#23
(28/11/2019, 16:59)berduş yazdı:
(28/11/2019, 16:47)ByChilavert yazdı: Bu 21 saat mesai yi çalıştığı güne bölemezmiyiz mesela Personel 12 gün çalışmış bu günlere 3-3-3-3  olma şansı var mı?
anlamadım zaten 3 lü olarak çalıştığı günlere dağıtmıyor mu?
Personel 2-18 arası izinli kalan 11 güne 3-3-3-3 diye dağıtmıyor.
Cevapla
#24
(29/11/2019, 00:07)berduş yazdı: Dilelim ki mesai=3 bu tek değeri ay ortasında bir yere mi alacak
Ya 6 girerseniz başa ve sona mi alacak, basa ve ortaya mi yoksa ay içinde dileyelim ki 10. ve 20. günler civarına mi?
3 ve sonrası için mantık nispeten ayni ama bu 3 durum için ayrı ayri kontroller, kodlar yazıp işlemi iyice karıştırmak var.
21 saat makimum mesai saati personele mesai yi 3 saat olarak veriyoruz. Ne 2 olacak nede 4 olacak standart 3 saat sadece değişen ay içerisinde toplam mesai saati kimisi 12-15-18 gibi çalıştığı gün kadar belirlenen mesai saati kadar alacak
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task