Dopo aver provato diverse applicazioni e metodologie per la gestione dei task (dal Metodo del Pomodoro al GTD di David Allen fino a Project), ho optato per realizzarne una mia. Il motivo? Le applicazioni, ovviamente realizzate per soddisfare una più ampia gamma di esigenze, avevano, per i miei scopi di freelancer, un numero eccessivo di funzionalità. Mi accorgevo che risultava tedioso aggiornarle periodicamente e via via ne abbandonavo l’utilizzo.
Ho quindi redatto una lista delle mie necessità:
- Un numero limitato di task per giorno
- Il mantenimento dello storico delle operazioni espletate
- Un avvertimento in caso di superamento del tempo limite, inteso come ore lavorative
- Lo sviluppo secondo metodologia MVP (Minimum Viable Product)
- Un report che mostrasse sia l’analisi mensile che il giorno maggiormente produttivo
Come per il rapportino, ho scelto Excel per svilupparne e testarne un prototipo, contando, in un prossimo futuro, di convertirlo in applicazione .Net.
Ora iniziamo!
Struttura del documento
Dovranno essere create le cartelle che seguono:
- un foglio contenente i parametri necessari alla configurazione del sistema (CONFIG)
- dodici fogli, uno per mese, per la definizione dei task (GEN...DIC)
- un foglio per la visualizzazione della reportistica (REPORT)
Cartella di configurazione (CONFIG)
Creare un foglio, ridenominarlo CONFIG e definirlo come da immagine sottostante. Al momento, l’unico parametro necessario, è l’anno di riferimento.
E’ importante che l’anno sia impostato nella cella B2, eventuali cambiamenti dovranno riflettersi anche nelle formule e nelle macro.
Cartelle dei task mensili
Creare una cartella e ridenominarla GEN, successivamente si effettuerà una copia della stessa, assegnando, di volta in volta, il nome di un mese diverso, da FEB a DIC.
Iniziamo ad impostare il giorno 1 come da immagine:
Per ogni giorno vi sarà la possibilità di definire al massimo venti task, un numero inferiore potrebbe non risultare sufficiente, mentre un numero superiore, oltre a rendere difficoltosa la visualizzazione, potrebbe originare aspettative superiori e compromettere la produttività.
Si uniscano le celle, relative alla colonna A, per le righe dalla 2 alla 21. Si ripeta quindi l’operazione per le colonne B, I, J e K. E’ possibile colorare le celle in dipendenza dal proprio gusto, la mia scelta è ricaduta su valori tenui, per facilitare la lettura.
Vediamo ora lo scopo di ogni singola colonna:
Colonna A : numero del giorno
Colonna B: nome del giorno
Colonna C : eventuale nominativo del committente del task
Colonna D : categoria, può assumere valori arbitrari (nel mio caso P=programmato, I=imprevisto)
Colonna E : stato, N=nuovo, P=posposto, E=eseguito
Colonna F: tempo stimato, in minuti
Colonna G : descrizione breve del task
Colonna H : note aggiuntive o utili al lavoro del giorno
Colonna I : percentuale di nuovi task
Colonna J : percentuale di task posposti
Colonna K : percentuale di task eseguiti
Visualizzazione degli ultimi giorni del mese in corso
Inserire nella colonna A i numeri dei giorni del mese, fermandosi al 28 (A542), per gli ultimi tre giorni che, come è noto, possono non essere presenti in tutti i mesi, inseriremo le seguenti formule:
Cella A562
=SE(GIORNO(DATA(CONFIG!$B$2;MESE(DATA.VALORE(STRINGA.ESTRAI(CELLA("nomefile";A562);TROVA("]";CELLA("nomefile";A562))+1;255)&" 1"))+1;0))>=29;29;"")
Cella A582
=SE(GIORNO(DATA(CONFIG!$B$2;MESE(DATA.VALORE(STRINGA.ESTRAI(CELLA("nomefile";A582);TROVA("]";CELLA("nomefile";A582))+1;255)&" 1"))+1;0))>=30;30;"")
Cella A602
=SE(GIORNO(DATA(CONFIG!$B$2;MESE(DATA.VALORE(STRINGA.ESTRAI(CELLA("nomefile";A602);TROVA("]";CELLA("nomefile";A602))+1;255)&" 1"))+1;0))>=31;31;"")
Nel dettaglio:
CELLA("nomefile";A602)
recupera il nome completo del foglio in uso
STRINGA.ESTRAI(CELLA("nomefile";A602);TROVA("]";CELLA("nomefile";A602))+1;255)
recupera il nome del foglio
MESE(DATA.VALORE(STRINGA.ESTRAI(CELLA("nomefile";A602);TROVA("]";CELLA("nomefile";A602))+1;255)&" 1"))
rappresenta il numero del mese
GIORNO(DATA(CONFIG!$B$2;MESE(DATA.VALORE(STRINGA.ESTRAI(CELLA("nomefile";A602);TROVA("]";CELLA("nomefile";A602))+1;255)&" 1"))+1;0))
per trovare il numero di giorni del mese in corso
Determinazione del giorno della settimana dal nome del foglio
Inserire, nella cella B2, la formula sottostante che permetterà di ricavare il nome del giorno dal suo numero (cella A2) e dal nome del foglio
=SE(A2="";"";SCEGLI(GIORNO.SETTIMANA(DATA(CONFIG!$B$2;MESE(DATA.VALORE(STRINGA.ESTRAI(CELLA("nomefile";A1);TROVA("]";CELLA("nomefile";A1))+1;255)&" 1"));A2));"DOM";"LUN";"MAR";"MER";"GIO";"VEN";"SAB"))
Calcolo della percentuale delle celle nuove (nuovi task)
Si utilizzi la funzione CONTA.SE, inserendo la formula sottostante nella cella I2
=CONTA.SE($E2:$E21;"N")/SE(CONTA.VALORI($E2:$E21)=0;1;CONTA.VALORI($E2:$E21))
Calcolo della percentuale delle celle posposte (task posposti)
Analogamente a quanto sopra, si inserisca la formula sottostante nella cella J2
=CONTA.SE($E2:$E21;"P")/SE(CONTA.VALORI($E2:$E21)=0;1;CONTA.VALORI($E2:$E21))
Calcolo della percentuale delle celle effettuate (task eseguiti)
Infine, ripetere l’operazione per la cella K2
=CONTA.SE($E2:$E21;"E")/SE(CONTA.VALORI($E2:$E21)=0;1;CONTA.VALORI($E2:$E21))
Una volta completato, si ripeta la procedura per ogni possibile giorno, dal 2 al 31, è possibile farlo anche selezionando il blocco di celle e trascinando.
Funzioni
All'interno del foglio creato, inserire le funzioni seguenti
Private Sub Worksheet_Change(ByVal target As Range)
Dim strValue As String
On Error Resume Next
'
' esegue il calcolo del lavoro eseguito
'
m_computeItems target
'
' verifica in base ai tempi inseriti, se la procedura è corretta
'
m_validateTime target
End Sub
per visualizzare in colore diverso la riga, in base allo stato
Sub m_computeItems(target As Range)
If target.Column <> 5 Or target.Cells.Count > 1 Then Exit Sub
strValue = UCase(Left(ActiveSheet.Cells(target.Row, 5).Value, 1))
Select Case strValue
Case "N"
ActiveSheet.Cells(target.Row, 7).Interior.ColorIndex = 0
Case "E"
ActiveSheet.Cells(target.Row, 7).Interior.Color = RGB(183, 222, 232)
Case "P"
ActiveSheet.Cells(target.Row, 7).Interior.Color = RGB(253, 233, 217)
Case Else
ActiveSheet.Cells(target.Row, 7).Interior.ColorIndex = 0
End Select
End Sub
per colorare la cella del giorno in rosso, in caso di superamento del tempo massimo fissato, al momento otto ore
Sub m_validateTime(target As Range)
Dim intMaxTime As Integer
Dim intDay As Integer
Dim intStartRow As Integer
Dim intEndRow As Integer
Dim report As Worksheet
Dim strRange As String
Dim dblSum As Double
Const intDAYS As Integer = 20
If target.Column <> 6 Or target.Cells.Count > 1 Then Exit Sub
Set report = Excel.ActiveSheet
intMaxTime = 8 * 60
'
' individua il giorno in base alla riga selezionata
'
intDay = target.Row \ intDAYS
'
' individua la riga di partenza
'
intStartRow = intDay * intDAYS + 2
intEndRow = intStartRow + intDAYS - 1
'
' somma le celle dell'intervallo
'
strRange = "F" & intStartRow & ":F" & intEndRow
dblSum = Excel.WorksheetFunction.Sum(report.Range(strRange))
Debug.Print dblSum
If dblSum > intMaxTime Then
ActiveSheet.Cells(intStartRow, 1).Interior.Color = RGB(255, 0, 0)
Else
ActiveSheet.Cells(intStartRow, 1).Interior.Color = RGB(218, 238, 243)
End If
End Sub
Ora copiare, come indicato in precedenza, il foglio creato, assegnando, di volta in volta, il nome di un mese differente, da FEB a DIC.
Cartella di visualizzazione delle statistiche (REPORT)
Adesso creiamo la cartella REPORT, nella quale potremo raccogliere e visualizzare le statistiche legate alla nostra produttività. Ad esempio il numero di task eseguiti o posposti per mese, oppure il giorno in cui mediamente risultiamo maggiormente produttivi.
Tale pagina avrà la struttura sotto riportata:
Calcolo del totale dei task per mese
Inserire nella cella B5 e quindi copiare nelle celle sottostanti, cambiando il nome del mese
=CONTA.VALORI(GEN!$E$2:GEN!$E$621)
Calcolo dei task eseguiti nel mese
Inserire nella cella C5 e quindi copiare nelle celle sottostanti, cambiando il nome del mese
=CONTA.SE(GEN!$E$2:GEN!$E$621;"E")
Mentre per la percentuale dei task eseguiti, inserire nella cella D5 e copiare nelle sottostanti
=SE(B5=0;0;C5/B5)
Calcolo dei task posposti nel mese
Inserire nella cella E5 e quindi copiare nelle celle sottostanti, cambiando il nome del mese
=CONTA.SE(GEN!$E$2:GEN!$E$621;"P")
Inserire nella cella F5 e quindi copiare nelle celle sottostanti
=SE(B5=0;0;E5/B5)
Calcolo dei task nuovi nel mese
Inserire nella cella G5 e quindi copiare nelle celle sottostanti
=B5-(C5+E5)
Inserire nella cella H5 e quindi copiare nelle celle sottostanti
=SE(B5=0;0;G5/B5)
Calcolo dei task eseguiti nel giorno/mese
Per determinare il giorno della settimana nel quale si è maggiormente produttivi, inseriremo questa formula
=SOMMA.SE(GEN!$B$2:GEN!$B$621;"="&$K$4;GEN!$K$2:GEN!$K$621)
nella cella L4 avendo cura di copiarla nelle celle L4:W10 cambiando il nome del mese
In tal modo otterremo un numero che ci fornirà una stima di quanti task avremo eseguito nel giorno della settimana considerato. Per essere efficace, la stima dovrebbe tenere conto anche dei task posposti e di quelli totali, ve lo lascio come esercizio!
Nella colonna del totale (X) andranno inserite le sommatorie per ogni singolo giorno, ad esempio, per il lunedì, andremo ad inserire la formula:
=SOMMA(L4:W4)
Visualizzazione del giorno maggiormente produttivo
Useremo la formattazione condizionale per evidenziare, in colore diverso, quale sia il giorno maggiormente produttivo. I passaggi sono sufficientemente esplicativi.
Ed anche questa parte si è conclusa, spero abbiate gradito. Come di consueto, se preferite disporre del file originale, potete scaricarlo agendo sul tasto che precede la sezione dei commenti. Il prossimo post sarà relativo alla realizzazione di un foglio Excel per la gestione delle finanze personali in stile Kakebo.