Cuando excel resta 2 fechas internamente lo que esta restando son 2 números que representan días (la parte fraccionaria representa el porcentaje de día transcurrido). [hay una explicacion de esto un poco mas extensa en
http://www.todoexpertos.com/categorias/tecnologia-e-internet/software-y-aplicaciones/microsoft-excel/respuestas/1760121/sumar-h-m-s-se-puede ]
Ejemplo:
Si en la celda A1 introduces "29/12/2007 07:00:00"
Y en la celda A2 "31/12/2007 09:00:00" y quieres obtener la diferencia de horas entre esas 2 fechas (restarlas), puedes hacerlo introduciendo la siguiente fórmula en A3: =(A1-A2)*24 (el formato de la celda del resultado ha de ser el general, no una fecha).
Cuando restas 2 fechas obtienes el resultado en días (ten cuidado por que en caso de ser mayor la fecha sustraendo el resultado daría lugar a una fecha negativa. Al restar fechas el excel automáticamente asigna a la celda de resultado el formato de fechas, lo cual da lugar a una representación indeterminada (############) si se mantiene ese formato, pero su lo cambias a general, veras que se corresponde con el numero de días de diferencia (con deciamles), por eso, al multiplicar ese resultado por 24 (numero de horas de 1 día), obtienes la diferencia en horas.
Si recurres a una macro hecha en VB, lo más practico es usar la función datediff. Un ejemplo del uso de esta función (respetando las celdas en las que se encuentran las fechas para el ejemplo anterior) seria este:
Sub Restar_Fechas_Didactico()
Dim FechaA As Date
Dim FechaB As Date
Dim Horas_De_Diferencia As Long
FechaA = Cells(1, 1)
FechaB = Cells(2, 1)
Horas_De_Diferencia = DateDiff("h", FechaA, FechaB)
Cells(3, 1) = Horas_De_Diferencia
End Sub
Sub Restar_Fechas_Eficiente()
Cells(3, 1) = DateDiff("h", Cells(1, 1), Cells(2, 1))
End Sub