Forum > Software > Excel - zliczanie godzin i określanie daty zakończenia zadania.

Strona 1 z 1 1
skocz

bartec64

Wysłane 2020-03-26 15:02


Temat który mnie w excelu przerasta...
Generalnie chodzi o to że wpisujemy godziny na wykonanie danego zadania (każdy wiersz to nowe zadanie) w kolumnach AJ, AK oraz AL(Hours to finish). Na podstawie tego automatycznie powinna uzupełnić się kolumna activity end. Następne zadanie (Activity start) musi się zacząć od daty w Activity end poprzedniego zadania. Problem jest taki że jest możliwość że dane zadanie będzie przechodziło z jednego dnia na drugi a do dyspozycji jest tylko 8 godzin dziennie (Implementation hours per day). Ta liczba godzin "8" również jest zmienną bo wszystko zależy od tego ile klient pozwoli nam przebywać na fabryce. Nie mam pojęcia jak to ogarnąć - próbowałem używać rounddown, próbowałem na ifach ale przy większej ilości godzin nie ma to prawa działać. Może ktoś ma pomysł jak to zliczyć? Może da się to zliczyć w innym programie a później tylko przekleić do excela? Z góry dzięki za pomoc!

Gigabyte B550 GAMING X V2, Ryzen 5 5600X, Adata XPG Gammix D10 DDR4 16GB (2 x 8GB) 3200 CL16, Sapphire Radeon RX 6600 XT Nitro / Acer VX5 / S8

bartec64

Wysłane 2020-03-26 15:20

Zakładając że w AJ będzie 4h, AK będzie 4h oraz w AL będzie 4h (suma 12h) activity end powinno być 07-04-20 12:00 więc activity start kolejnego zadania będzie 07-04-20 12:00 itd itd

Gigabyte B550 GAMING X V2, Ryzen 5 5600X, Adata XPG Gammix D10 DDR4 16GB (2 x 8GB) 3200 CL16, Sapphire Radeon RX 6600 XT Nitro / Acer VX5 / S8

maq2

  • maq2
  • wiadomość Użytkownik

  • 2249 wypowiedzi

Wysłane 2020-03-26 16:13

Fajne zadanie. Pomyślę w wolnej chwili.

bartec64

Wysłane 2020-03-26 16:25

@maq  - tak, wygląda fajnie, ale spędziłem nad tym już lekko z 3h i nie mam więcej pomysłów...nie działa :P
Problem jest taki że zadań na tej liście jest ok 50 a klient jest za przeproszeniem baranem który zmienia daty rozpoczęcia prac z dnia na dzień oczekując tego samego dnia detalicznego czasu wykonania ze strony mojej firmy. I robi to specjalnie. Więc gdyby taki excel działał to uzupełnie 2 komórki a reszta się policzy sama i mam luz, a klientowi pokaże faka i do widzenia...

Gigabyte B550 GAMING X V2, Ryzen 5 5600X, Adata XPG Gammix D10 DDR4 16GB (2 x 8GB) 3200 CL16, Sapphire Radeon RX 6600 XT Nitro / Acer VX5 / S8

Natan

Wysłane 2020-03-26 19:15 , Edytowane 2020-03-26 21:05

generalnie da się :)

czy można w tym użyć VBA?
te 8h z definicji będzie dla całej tabeli? czy może zmieniać się per row?
i jak rozumiem czas pracy to suma AJ, AK, AL?

i istotne założenie godzin pracy - bo te 8h na dzień to mało. zawsze start o 8:00?
i bardzo istotne czy to jest 7 dni w tygodniu (bo trzeba "wyjątek na piątek")

EDIT:

Na szybko. W A2 mam czas startu, w B2 ilość godzin roboczych, w AK1 wpisane Implementation hours per day, początek dnia o 8:00, mam zakres "holidays", w którym są wypisane dodatkowe dni wolne poza weekendem

=IF(8+$AK$1-MOD(A2,1)*24>B2,A2+B2/24,WORKDAY(A2,MAX(1,INT((B2-(8+$AK$1-MOD(A2,1)*24))/8)),holidays)+"08:00"+MOD((B2-(8+$AK$1-MOD(A2,1)*24)),8)/24)


EDIT2: zaraz koncowka dnia zle lapie.... in progress ;)

bartec64

Wysłane 2020-03-26 22:33 , Edytowane 2020-03-26 22:36

@ Natan - Ogólnie nie widzę przeszkód żeby użyć VBA tylko musiałbyś mi później wytłumaczyć jak to ew. dostosować do zmian w planie.

Przyjęliśmy że nasz x=8 czyli liczba godzin na dzień którą możemy pracować. x będzie zmienny (może być 6 lub 10), ale stały dla całej tabeli, czyli każdy wiersz będzie miał tyle samo godzin kiedy już zdefiniuje x.

Czas pracy to suma AJ, AK, AL

Nie koniecznie start o 8:00, ale każdego dnia będzie start o tej samej godzinie - ustali ją klient.
Czy to będzie 7 dni w tygodniu - na razie niestety tego nie wiem.

BTW Ta formuła już wygląda...grubo :D

Gigabyte B550 GAMING X V2, Ryzen 5 5600X, Adata XPG Gammix D10 DDR4 16GB (2 x 8GB) 3200 CL16, Sapphire Radeon RX 6600 XT Nitro / Acer VX5 / S8

Natan

Wysłane 2020-03-27 10:25 , Edytowane 2020-03-27 10:29

z VBA jest o tyle prościej, że można napisać funkcję, którą używa się potem bezpośrednio w komórkach jak normalnego makra excelowego.
ale wymaga włączonego makro i xlsm, co niekiedy w środowisku klienckim jest zablokowane - dlatego pytam.

większość takich rzeczy można zrobić bez VBA, jak widać powyżej. Workdays() liczy teraz bez Sobota-Niedziela-Święto, tylko zmienny Start w dniu pracy tu nie jest uwzględniony (koniec tak, bo wynika z Implementation h per day)
Zmiany do tego można oprzeć o tą samą logikę.

cichym założeniem jest fakt ze 8+$AK$1 (czyli początek dnia + ilość godzin na dzień) nie będzie więcej niż 24

logika w sumie jest prosta, tylko w powyższym przeoczyłem jeden aspekt ;)
w drugiej części tego if'a - czyli jeśli czas potrzebny na zadanie przekroczy godziny dostępne dziś - trzeba najpierw odliczyć czas, który dziś został dopiero od tej wartości wykonać resztę.

Microsoft zapisuje date jako ilość dni od 1900-01-01, czyli godziny minuty sekundy to ułamek.
Stad z timestamp'a można oddzielić część całkowitą INT(cell) [datę], i ułamek MOD(cell,1) [czas], albo dodać 1 i data wskaże jutro, dodać 0.5 i doda 12h (bo to pół dnia)

Wiec jak masz np 20h na zadanie i 8h dzien pracy to INT(20/8)=2 dni, a reszta to godziny 0.5h = 0,0208(3) dnia

Tylko zmienny start oznacza, że aby to policzyć należy uwzględnić początki i końce dnia pracy z każdego dnia, przez które task przejdzie (bo te przykładowe 20h na zadanie to może być 1 dzień a może 5, bo się nie pracujący weekend po drodze trafi) - czyli spora komplikacja. chyba ze zakładamy ze zadanie max skończy się jutro, tylko jeszcze co z weekendem :)

Strona 1 z 1 1
skocz

Kto jest online: 0 użytkowników, 547 gości