Pianificazione di Excel: prova a calcolare ore dopo mezzanotte, quindi non sono negative


3

Questa è una schermata del problema che ho e del codice che sto usando.

Se qualcuno può darmi qualche tipo di aiuto sul perché ho numeri negativi invece di 40, che è ciò che dovrebbe essere uguale, per favore aiutatemi. Sarei così grato. Grazie!


Potresti voler ricalibrare le dita. La cella P16, che hai evidenziato, dovrebbe essere 38 (7 + 8 + 8 + 7 + 8). Se te ne fossi reso conto, potresti aver notato che il valore che hai ottenuto, -10, era spento di 48 ore, cioè due giorni, corrispondenti ai due turni terminati dopo mezzanotte.
G-Man,

Risposte:


4

È correttamente selezionato "Usa il sistema di dati 1904" per la cartella di lavoro, nella sezione File> Avanzate> "Quando si calcola questa cartella di lavoro" (scorrere fino alla fine).

Ciò è necessario per consentire i tempi di calcolo come negativi. (Prova a spegnerlo e vedrai i neg trasformarsi in tutti i #)

Ad esempio, in B16 e C16 l'ora viene semplicemente inserita alle 18:00 e all'01: 00 senza alcuna data. 01:00 - 18:00 è davvero un momento negativo. Circa -0,71 se visualizzato come numero.

La soluzione è quella di modificare ogni singolo calcolo dell'ora di fine inizio in modo da soddisfare la mezzanotte. Quindi sostituire "C16-B16" con "IF (C16-B16 <0, C16-B16 + 1, C16-B16)"

Dovresti farlo per ogni giorno della settimana, il che rende la formula piuttosto lunga.

Valuta di aggiungere una colonna aggiuntiva tra i giorni per visualizzare le ore lavorate per quel giorno. Quindi il totale deve solo sommare quelle celle.

Modifica: battuto ad esso!

Modifica di nuovo: dovresti usare +1 come nel mio esempio, anziché +24 come nel post precedente, perché l'unità è giorni, non ore.

Modifica finale: una soluzione molto più breve è quella di sostituire "C16-B16" con "MOD (C16-B16,1)". Questo funziona mantenendo solo la parte frazionaria del tempo. Con i tempi, un decimale 1 è di 24 ore.


Mi piace molto la soluzione mod, ho sempre usato la versione if per farlo.
gtwebb,

1

La solita formula per superare le 24 è:

 =EndTime - StartTime +(EndTime < StartTime)

Combinare tutto ciò in una formula, per riassumere tutti i giorni della settimana, è scomodo ma fattibile. Richiede una formula inserita nell'array in quanto è necessario testare ciascuna coppia singolarmente.

La formula seguente utilizza la tua configurazione in quanto tutti i tuoi EndTimes sono in colonne pari; e gli StartTime sono in colonne dispari.

Si noti che i due array costruiti sono diversi per una colonna. Nelle versioni di Excel 2007+, è possibile testare direttamente ODD / EVEN con la funzione ISODD / ISEVEN.

Questa formula deve essere immessa nell'array :

=SUM(
MOD(COLUMN($C16:$O16),2)*$C16:$O16-
(MOD(COLUMN($B16:$N16),2)=0)*$B16:$N16+
((MOD(COLUMN($C16:$O16),2)*$C16:$O16-(MOD(COLUMN($B16:$N16),2)=0)*$B16:$N16)<0))
*24

oppure, utilizzando ISODD e ISEVEN:

=SUM(
ISODD(COLUMN($C16:$O16))*$C16:$O16-
ISEVEN(COLUMN($B16:$N16))*$B16:$N16+
((ISODD(COLUMN($C16:$O16))*$C16:$O16-ISEVEN(COLUMN($B16:$N16))*$B16:$N16)<0))
*24

O, ancora più breve, ma più difficile da capire, poiché utilizziamo la funzione MOD per conservare solo la componente frazionaria:

=SUM(
     MOD(
         ISODD(COLUMN($C16:$O16))*$C16:$O16-
         ISEVEN(COLUMN($B16:$N16))*$B16:$N16,
     1))
*24

Per inserire una formula in serie, dopo aver immesso la formula nella cella o nella barra della formula, tieni premuto ctrl-shift mentre premi Invio . Se lo hai fatto correttamente, Excel posizionerà le parentesi graffe {...} attorno alla formula.

Ho fatto la formula per la linea che mostri nel tuo screenshot. Il risultato è 37.9833 usando i tuoi numeri


0

Il tuo problema è quando passi la mezzanotte. Prendi ad esempio la prima fila di venerdì, sabato e domenica. Ogni giorno l'orario di fine è alle 2:00. Ad esempio, venerdì, quando si sottraggono gli orari, sono necessarie le 18:00 di venerdì meno le 2:00 di venerdì che è prima delle 18:00.

Al fine di evitare il negativo, ma mantenendo comunque l'aspetto visivo piacevole del grafico, è necessario utilizzare un'istruzione IF. Per calcolare per venerdì utilizzare:

=IF(K3 < J3, K3 - J3 + 24, K3 - J3)

Vi sono tre sezioni nell'istruzione IF.

(1) la condizione

K3 < J3

Questo controlla se K3 (l'ora di fine) è inferiore a J3 (l'ora di inizio). In tal caso restituirebbe un numero negativo (l'ora 2:00 AM è "inferiore a" 6:00 PM).

(2) se la condizione è vera

K3 - J3 + 24

Se la condizione è vera, Excel utilizza questa equazione. L'ho scritto per aggiungere 24 per contrastare eventuali aspetti negativi che potrebbero verificarsi.

(3) se la condizione è falsa

K3 - J3

Se la condizione è vera, Excel utilizza questa equazione.

Sommario

Utilizzare l'istruzione IF fornita al posto dell'equazione utilizzata per calcolare le ore di ogni giorno.


Come dice gtwebb, dovresti usare +1 non +24, altrimenti dalle 23:00 alle 07:00, ad esempio, otterrai un risultato 560:00! Puoi vedere che se formatti la cella del risultato come [h]: mm. Utilizzerai +24 solo quando moltiplichi anche i tempi per 24 per ottenere il tempo decimale.
Barry Houdini,

0

Ho avuto un problema simile nel calcolare i tempi che occasionalmente passavano oltre la mezzanotte senza informazioni sul giorno o sulla data. I miei orari di inizio erano di sera e talvolta si riversavano nel giorno successivo, quindi ho usato un paio di formule insieme per farlo uscire giusto per me:

=IF(D4< C4,TEXT(D4-C4+24,"h:mm"),TEXT(D4-C4,"h:mm"))

(nota che sono stato costretto ad aggiungere uno spazio dopo il simbolo minore di per qualche motivo di formattazione qui - non sto usando uno spazio lì nella mia formula)

È semplice se, dove nel mio caso D4 è l'ora di fine e C4 è l'ora di inizio. Se l'ora di fine è inferiore all'ora di inizio, deve essere scaduta oltre la mezzanotte. La dichiarazione intermedia fornisce la correzione del tempo totale di lavoro per superare la mezzanotte (+24). La fine mostra il tempo di lavoro se la sottrazione regolare è tutto ciò che serve. Ho scoperto che senza il "TESTO" e il formato dell'ora, la matematica +24 verrebbe visualizzata come valore decimale.


Questo in realtà duplica solo le soluzioni che sono state precedentemente apportate.
Fixer 1234

Non l'avrei pubblicato se le altre soluzioni avessero funzionato per me. Stavo cercando di risolvere la stessa sfida dell'OP, per quanto potevo vedere, ma non volevo cambiare le date del 1904 e l'affermazione IF simile non mi dava risultati attesi. Sto solo cercando di aiutare.
user5852781

Questa è la soluzione di quemeful (con lo stesso errore), ma usando la formattazione come correzione. La parte temporale è la parte frazionaria del numero. La parte intera è intera giornata. Quindi la correzione dovrebbe essere 1 invece di 24. La tua formula fornisce il momento giusto, ma 23 giorni dopo. La formattazione quindi ignora il giorno sbagliato e visualizza solo l'ora. :-)
fixer1234
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.