Tworzenie harmonogramu godzin pracy

0

Hej,

Mam za zadanie stworzyć narzędzie które na podstawie danych wejściowych (konkretnych) wygeneruje ''siatkę'' godzin pracy pracowników i wypluje konkretne zmiany 6-14; 7-15; 10-20 itd itd.

Ogólne działanie takowego makra powiedzmy mam, problem zaczyna się wtedy gdy makro musi mieć wymóg że w danym wierszu (wiersz to jeden pracownik) nie może być suma większa od 10.

Poniżej wklejam kod który udało mi się stworzyć, uzupełnia odpowiednio wartości na podstawie danych wejściowych tylko bez tego wymogu (suma wiersza nie większa niż 10).

Sub WypelnijKomorkiJedynkami()
    Dim ws As Worksheet
    Dim col As Integer
    Dim row As Integer
    Dim suma As Integer
    Dim liczba_osob As Integer
    
    ' Ustaw arkusz, na którym chcesz działać
    Set ws = ThisWorkbook.Sheets("01")
    
    ' Wyczyść zakres G5:AD36
    ws.Range("G5:AD36").ClearContents
    
    ' Iteruj przez kolumny od G do Y
    For col = 7 To 30
        ' Pobierz liczbę osób w pracy w danej godzinie
        liczba_osob = ws.Cells(2, col).Value
        
        ' Ustaw sumę kolumny na 0
        suma = 0
        
        ' Uzupełnij komórki wartością 1 do momentu, gdy suma wiersza będzie równa liczbie osób w pracy
        For row = 5 To 36
            ' Sprawdź, czy suma nie przekracza liczby osób w pracy
            If suma < liczba_osob Then
                ws.Cells(row, col).Value = 1
                suma = suma + 1
            Else
                ' Jeśli suma przekroczyła liczbę osób w pracy, zostaw komórkę pustą
                If Not IsEmpty(ws.Cells(row, col)) Then
                    ws.Cells(row, col).ClearContents
                End If
            End If
        Next row
    Next col
End Sub

Poniżej w załącznikach też zrzuty ekranu - w jednym jest uzupełnienie "1" przez makro, w drugim uzupełnienie "1" przeze mnie w sposób w jaki powinno makro uzupełniać.

Tak w ramach wdrożenia, w zakresie G2:AD2 jest podana ilość pracowników w każdej godzinie, godziny są wypisane w G1:AD1.

Czy jest ktoś w stanie mi pomóc, ewentualnie jakoś naprowadzić żeby to hulało?

Chyba że da się pominąć totalnie te wszystkie "1" i bezpośrednio wygenerować poszczególne zmiany 6-14, 7-15 itd w oparciu o zapotrzebowanie które jest podane w G2:AD2...

Tak ma być:
image

A tak uzupełnia makro:
image

0

NIe podam gotowego kodu w tej chwili, ale pewnie sobie poradzisz.

W tym miejscu:

~~If suma < liczba_osob Then
                ws.Cells(row, col).Value = 1
                suma = suma + 1

zmień na

If suma < liczba_osob AND mojasuma < 10 Then  
ws.Cells(row, col).Value = 1
                suma = suma + 1

a mojasuma ma wyglądać tak:
suma zakresu od ws.Cells(row,7) do ws.Cells(row, col - 1)

edit:
ws.Cell(row, col-1) jednak nie zadziała w 7 kolumnie..
nic mądrego nie przychodzi mi do głowy, na szybko chyba jedynie żeby w 7 kolumnie zrobić zrobić pętlę 7 to 7 (bo pierwsza kolumna więc nigdy nie przekroczy 10 i użyć w niej Twojej pętli, a póżniej kolejną od kolumny 8 do 30 i użyć mojej propozycji

1 użytkowników online, w tym zalogowanych: 0, gości: 1