Sommare le ore e minuti in VBA

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
5.260
245
Italy
2019
415
Sommare le ore e minuti in VBA
Quando si deve calcolare la somma di Ore e Minuti il gioco è semplice fino a che la somma non supera le 24 ore, ma nel caso si superi questo limite, diventa un po' più complesso fare questo calcolo.

L'unico modo è quello di sommare trasformando prima le ore in minuti e poi ottenuto il valore finale trasformarlo di nuovo nel formato HH:MM.
Ecco una routine che espleta questo lavoro.

Supponiamo di avere i seguenti orari nelle rispettive celle
A1 = 12:10
A2 = 15:56
e vogliamo che nella cella A3 venga inserito il risultato delle ore (28:06):

Codice:
Function SommaOre() As String
    Dim i As Long, iPos As Long
    Dim iMinuti As Long
    Dim Ora As String
    Dim sRisultato As String
    iMinuti = 0
    For i = 1 To 2
        Ora = Range("A" & i).Text
        iPos = InStr(1, Ora, ":")
        iMinuti = iMinuti + (Mid(Ora, 1, iPos - 1) * 60) + Mid(Ora, iPos + 1)
    Next i
   
    sRisultato = Format(iMinuti / 60, "00") & ":" & Format(iMinuti Mod 60, "00")
    Range("A3").NumberFormat = "[HH]:MM"
    Range("A3") = sRisultato
    SommaOre = sRisultato ' restituisce il valore 28:06
End Function
Possiamo anche farci restituire il risultato in cella inserendo la funzione in cella come formula:
=SommaOre()

Possiamo addirittura richiamare la funzione SommaOra() prevedendo dei parametri da inserire nella funzione stessa.
In questo caso ci servono 3 parametri:
- colonna (es. "A")
- RigaIniz (numero)
- RigaFine (numero)

Per comodità chiamiamo questa seconda funzione SommaOre2():
Codice:
Function SommaOre2(ByVal Colonna As String, RigaIniz As Long, RigaFine As Long) As String
    Dim i As Long, iPos As Long
    Dim iMinuti As Long
    Dim Ora As String
    Dim sRisultato As String
    iMinuti = 0
    For i = RigaIniz To RigaFine
        Ora = Range(Colonna & i).Text
        iPos = InStr(1, Ora, ":")
        iMinuti = iMinuti + (Mid(Ora, 1, iPos - 1) * 60) + Mid(Ora, iPos + 1)
    Next i
   
    sRisultato = Format(iMinuti / 60, "00") & ":" & Format(iMinuti Mod 60, "00")
    'Range(Colonna & RigaFine + 1).NumberFormat = "[HH]:MM"
    'Range(Colonna & RigaFine + 1) = sRisultato
    SommaOre2 = sRisultato

End Function
Per utilizzarla nella cella dovremo inserirla così:
= SommaOre2("A"; 1; 2)

Spero di aver fatto cosa gradita.
Alla prossima. Saluto_saluto
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!