Je comprends le problème comme suit :
- Il existe un programme de production fixe qui ne se déroule qu'à certaines périodes de temps et certains jours.
- Nous ne tiendrons pas compte des temps morts, des déjeuners, des pauses, etc. et supposerons que la ligne de production fonctionne en permanence pendant cette période de travail.
- Nous avons une heure de départ donnée, un nombre d'unités à produire et un temps de production pour chaque unité.
- Nous devons savoir quand la production sera terminée.
ÉTAPE 1
Installez une table pour votre programme
Faites un tableau qui a un calendrier de deux semaines. Nous avons besoin d'un calendrier de deux semaines, car nous pouvons ainsi choisir la première date de début correspondante (comme un mardi), puis inclure les sept lignes suivantes et savoir que nous avons une semaine de travail complète (comme un mardi - lundi). Si vous n'aviez pas le calendrier deux fois et que vous commenciez un vendredi, vous obtiendriez un jour et ensuite un tas de lignes vides. Veillez à inclure le samedi et le dimanche. Voici un aperçu de la table que j'ai appelée tblSchedule
:
... et la version CSV (le temps est indiqué comme une fraction de jour) :
Weekday,Day,Start Time,Work Hours
1,Sunday,0,0
2,Monday,0.333333333333333,9
3,Tuesday,0.333333333333333,9
4,Wednesday,0.333333333333333,9
5,Thursday,0.333333333333333,9
6,Friday,0.333333333333333,5
7,Saturday,0,0
1,Sunday,0,0
2,Monday,0.333333333333333,9
3,Tuesday,0.333333333333333,9
4,Wednesday,0.333333333333333,9
5,Thursday,0.333333333333333,9
6,Friday,0.333333333333333,5
7,Saturday,0,0
ÉTAPE 2
Installez une table pour vos productions
Vous avez déjà le début de celui-ci. Nous allons ajouter quelques champs et je suppose que vous utilisez un tableau réel (ruban Insertion > Tableau). Si ce n'est pas le cas, tout fonctionnera mais la compréhension des formules sera plus difficile car il s'agira d'un ensemble de références de cellules au lieu de noms de champs. Les tableaux sont géniaux. Voici un instantané de ce que j'ai appelé tblProduction
(Notez que mon système utilise le format non-ISO pour les dates de l'année. m/d/yyyy
parce que l'Amérique).
... et la ligne d'en-tête du CSV :
Min / Unit,Qty Units,Start,Production Time (hrs),Weeks,Days,Hours,End
ÉTAPE 3
Ajoutez vos formules
Temps de production (heures)
=[@[Min / Unit]]*[@[Qty Units]]/60
Celui-ci est assez explicite. Le seul problème est que nous convertissons les minutes en heures, car le reste des calculs se fera en heures.
Semaines
=[@[Production Time (hrs)]]/(SUM(tblSchedule[Work Hours])/2)
Il s'agit simplement de convertir les heures en semaines de travail. Notez que nous devons diviser la somme de toutes les heures de travail d'une semaine par 2 parce que notre programme est de deux semaines et non d'une seule.
Jours
=MATCH(TRUE,INDEX((SUBTOTAL(9,OFFSET(tblSchedule[Work Hours],WEEKDAY([@Start])-1,0,ROW($A$1:$A$7)))-ROUND((((((TIME(HOUR([@Start]),MINUTE([@Start]),SECOND([@Start])))-INDEX(tblSchedule[Start Time],WEEKDAY([@Start])-1))*24))+(MOD([@Weeks],1)*(SUM(tblSchedule[Work Hours])/2))),2))>=0,0),0)-1
Celui-ci est le gros monstre. Il peut être divisé en plusieurs parties si cela peut aider, mais j'essayais de le garder comme un beau produit fini et je me suis dit que votre ami ne voudrait pas de toutes ces colonnes supplémentaires. Si tu devais le décomposer, ça pourrait ressembler à quelque chose comme ça :
... et la ligne d'en-tête du CSV :
Days,Start Time,Work Start Time,Hours in Last Week,Hours from Start of Last Week
Heure de début
=TIME(HOUR([@Start]),MINUTE([@Start]),SECOND([@Start]))
Heure de début des travaux
=INDEX(tblSchedule[Start Time],WEEKDAY([@Start])-1)
Heures de la semaine dernière
=MOD([@Weeks],1)*(SUM(tblSchedule[Work Hours])/2)
Heures depuis le début de la semaine dernière
=ROUND(((([@[Start Time]]-[@[Work Start Time]])*24)+[@[Hours in Last Week]]),2)
Cette dernière formule est celle dont nous avons vraiment besoin. Si vous développez dans ces colonnes, la formule pour Days
serait la suivante :
=MATCH(TRUE,INDEX((SUBTOTAL(9,OFFSET(tblSchedule[Work Hours],WEEKDAY([@Start])-1,0,ROW($A$1:$A$7)))-[@[Hours from Start of Last Week]])>=0,0),0)-1
L'idée de base est de trouver le premier jour du calendrier où le total des heures de travail du jour de départ est supérieur au nombre d'heures dont nous avons besoin pour terminer la production. C'est ce que MATCH(TRUE,INDEX((SUBTOTAL()-[Hours Left])>=0,0),0)-1
fait. Le site SUBTOTAL
fait un peu de magie avec OFFSET
et renvoie un tableau de valeurs. Ces valeurs sont le total des heures de travail à la fin du premier jour, du deuxième jour, du troisième jour, etc. Soustrayez les heures qu'il nous reste à travailler et vous obtenez des nombres positifs ou négatifs (ou zéro, d'où l'expression "heures de travail"). >=0
au lieu de seulement >0
). INDEX
renvoie un tableau de FALSE
y TRUE
donc MATCH
trouve le premier TRUE
valeur. Puisque nous cherchons à savoir combien plus jours dont nous avons besoin que le premier jour, soustrayez-en un à la fin. C'est un processus compliqué pour arriver à un seul nombre entre 0 et 6.
Heures
=(MOD([@Weeks],1)*(SUM(tblSchedule[Work Hours])/2))-IF([@Days]=0,0,SUM(OFFSET(tblSchedule[Work Hours],WEEKDAY([@Start])-1,0,[@Days])))
Le début de celui-ci est juste comme le Hours in Last Week
formule que nous avons utilisée ci-dessus. Le site IF
à la fin soustrait les heures de travail entre le premier jour et le dernier jour, exclusivement. Si nous commençons le mardi et finissons le vendredi, soustrayez le mercredi et le jeudi. Cela nous donne les heures que nous devons travailler le dernier jour (qui peut être le même que le premier jour).
Fin
=[@Start]+7*TRUNC([@Weeks])+[@Days]+[@Hours]/24
Date de début + 7 * (nombre de semaines sous forme d'un nombre entier, en laissant tomber la fraction) + Jours + (heures converties en une valeur décimale de jours) = Date et heure et fin de la production.
RÉSUMÉ
Oui, ce sont de grandes formules. Cependant, j'ai fait en sorte qu'elles soient faciles à maintenir et j'ai testé quelques cas limites différents pour que je pense que tout fonctionne correctement. Si votre ami veut une feuille soignée, utilisez la grande formule de Days
. S'il en veut une qu'il peut expliquer plus facilement, utilisez la version avec plusieurs formules d'aide.
ADDITION
Pour ce que cela vaut, votre ami peut également ajouter des facteurs du monde réel comme le taux de rebut prévu et les temps d'arrêt (y compris les pauses prévues). Voici un exemple qui tient compte de ces facteurs avant ils sont introduits dans les formules compliquées ci-dessus.
Taux de rejet
Saisi manuellement en tant que pourcentages.
Temps de production (heures)
=[@[Min / Unit]]*([@[Qty Units]]/(1-[@[Reject Rate]]))/60
Heures normales
Saisi manuellement. Mêmes valeurs que celles utilisées dans les exemples originaux ci-dessus.
Temps d'arrêt
Saisi manuellement comme un nombre d'heures, et non comme un pourcentage. Vous pouviez le modifier pour qu'il soit un pourcentage, mais les heures étaient plus faciles à afficher.
Heures de travail
=[@[Standard Hours]]-[@Downtime]
Notez que cela peut fausser l'heure de fin réelle du dernier jour de production. Les formules supposeront que vous commencez à 8 heures du matin et travaillez pendant X heures alors qu'en réalité il y a une pause quelque part au milieu. Cela fonctionnera quand même pour une approximation.