La consultazione del forum è libera per tutti.
Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).
Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.
Buonasera agli utenti, sono Davide e avrei la necessità di conoscere quanto tempo passano due persone che lavorano insieme ad uno stesso ordine. Grazie.
Ciao, sto guardando dal cell ma credo che dovresti allegare un file con piú casistiche.
Da quel che ho capito, la situazione del tuo esempio va bene in quanto ci sono al massimo 2 operatori che si accavallano... dovresti aggiungere qualche altro caso, magari con 3 (o piú) operatori che si accavallano e mettere manualmente il risultato che vorresti avere.
Ciao,
non credo di aver capito, nel senso che più di due operatori non possono accavallarsi con lo stesso ordine e nella stessa data/ora, invece possono esserci più di due operatori, in coppia o singoli, che lavorano sullo stesso ordine ma in date/orari diversi e senza accavvallarsi.
Grazie
Appunto....
ti chiedo quale riscontro/controllo vorresti nel caso si verificasse che più di due operatori siano nello stesso orario per lo stesso ordine.
@davide
per essere chiari...
Con l'esempio che hai postato è relativamente semplice creare una formula, magari con una colonna d'appoggio, per ricreare quello che tu hai scritto manualmente ma non credo che la tua situazione reale sia così semplice quindi... prima di impelagarsi in formule astruse preferirei avere uno scenario più completo.
ok ci sono: in teoria non possono esserci più di due operatori sullo stesso ordine e nello stesso orario, se si verificasse questo caso sarebbe un errore da parte degli stessi operatori e la formula potrebbe restituire l'avvertimento "attenzione più di due operatori sulla stessa postazione".
grazie.
Il nuovo file alla fine non l'hai mandato...
Ho avuto poco tempo per metterci mano ma direi che la cosa più "sensata" è far fare un controllo tramite VBA.
Se ti va bene così, domani o al massimo dopodomani potrò buttar giù qualcosa.
P.S.
Se il file orifinale ha una struttura diversa da quello che hai allegato, allegane un altro, specialmente se sei poco pratico di VBA.
ciao, preferisco aspettare per inserire una parte del file "originale" così il lavoro avrà sicuramente un risultato migliore, come mi hai consigliato.
Grazie.
buonasera, il nuovo file è completo e definitivo per essere elaborato dal VBA.
Grazie.
buonasera, il nuovo file è completo e definitivo per essere elaborato dal VBA.
Ok, ma non capisco il nuovo file...
Se è questione di ottenere un elenco con le sovrapposizioni allora ok ma se c'è altro mi spiace ma il lavoro si allunga e non ho tutto quel tempo da dedicargli.
Quali campi si dovrebbero eventualmente riempire con VBA?
si dovrebbero riempire i campi nelle colonne E e F, cioè la coppia col numero degli operatori e il tempo che hanno passato in sovapposizione, il "simil Gantt" era per chiarire ulteriormente il concetto, qualore ce ne fosse la necesssità.
Grazie.
scusa ma in questi giorni il tempo è quel che è...
Prova con questo codice in un modulo standard (associato al pulsante Controlla Sovrapposizioni ):
Option Explicit Sub CheckOperators() Dim LRow As Long Dim ArrOrigin Dim i As Long Dim j As Long Dim k As Double Dim OrdDataOper Dim AppSplit Dim NrOrder As Variant Dim Operators As String Dim ActData As String Dim StartHour As Double Dim EndHour As Double Dim AppArray() LRow = Range("A" & Rows.Count).End(xlUp).Row If LRow > 2 Then ArrOrigin = Range("A3:C" & LRow) ReDim AppArray(1 To UBound(ArrOrigin, 1), 1 To 2) For i = 1 To UBound(ArrOrigin, 1) OrdDataOper = Split(ArrOrigin(i, 1), "-") NrOrder = OrdDataOper(0) ActData = OrdDataOper(1) Operators = OrdDataOper(2) StartHour = ArrOrigin(i, 2) EndHour = ArrOrigin(i, 3) If i + 1 < UBound(ArrOrigin, 1) Then For j = i + 1 To UBound(ArrOrigin, 1) AppSplit = Split(ArrOrigin(j, 1), "-") If AppSplit(0) = NrOrder Then If (ArrOrigin(j, 2) <= StartHour And ArrOrigin(j, 3) >= StartHour _ And ArrOrigin(j, 3) <= EndHour) Then AppArray(j, 2) = ArrOrigin(j, 3) - StartHour ElseIf (ArrOrigin(j, 2) >= StartHour And ArrOrigin(j, 3) <= EndHour) Then AppArray(j, 2) = ArrOrigin(j, 3) - ArrOrigin(j, 2) ElseIf (ArrOrigin(j, 2) <= EndHour And ArrOrigin(j, 3) >= EndHour) Then AppArray(j, 2) = EndHour - ArrOrigin(j, 2) ElseIf (ArrOrigin(j, 2) <= StartHour And ArrOrigin(j, 3) >= EndHour) Then AppArray(j, 2) = EndHour - StartHour End If End If If Len(AppArray(j, 2)) > 0 Then AppArray(j, 1) = Operators & "-" & AppSplit(2) End If Next j End If Next i ArrOrigin = AppArray Range("E3").Resize(UBound(ArrOrigin, 1), 2).Value = ArrOrigin MsgBox "Controllo eseguito.", vbInformation + vbOKOnly, "OPERAZIONE COMPLETATA" End If End Sub