Creo que sé qué es lo que buscas.
Excel no tiene funciones nativas para manejar las zonas horarias. Para determinar la hora GMT hay que utilizar la API de Windows.
El código que te voy a compartir no es mio, es de uno de mis ídolos de VBA, Chip Pearson, y fue diseñado hace ya un tiempo para solventar este problema.
El Modulo completo es más grande y tiene más funcionalidades, pero para hacértelo más corto he dejado solo la función que necesitas.
Lo único que tienes que hacer es copiar y pegar el código que te voy a dar en un Modulo estándar. Luego solo tienes que introducir la fórmula en la celda como hago en el siguiente vídeo o manejar el resto como tu prefieras. En el vídeo entro a Google y busco la hora GMT actual para que veas que coincide con el resultado que arroja la función y asegurarnos que es correcto.
VIDEO DEMO
Código:
Option Explicit
Option Compare Text
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'TIPOS REQUERIDOS!!!***
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Type SYSTEMTIME
WYear As Integer
WMonth As Integer
WDayOfWeek As Integer
WDay As Integer
WHour As Integer
WMinute As Integer
WSecond As Integer
WMilliseconds As Integer
End Type
Private Type TIME_ZONE_INFORMATION
Bias As Long
StandardName(0 To 31) As Integer
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(0 To 31) As Integer
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Public Enum TIME_ZONE
TIME_ZONE_ID_INVALID = 0
TIME_ZONE_STANDARD = 1
TIME_ZONE_DAYLIGHT = 2
End Enum
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'API de Windows REQUERIDA!!!***
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function GetTimeZoneInformation Lib "kernel32" _
(lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Private Declare Sub GetSystemTime Lib "kernel32" _
(lpSystemTime As SYSTEMTIME)
Function ConvertLocalToGMT(Optional LocalTime As Date, _
Optional AdjustForDST As Boolean = False) As Date
Dim T As Date
Dim TZI As TIME_ZONE_INFORMATION
Dim DST As TIME_ZONE
Dim GMT As Date
If LocalTime <= 0 Then
T = Now
Else
T = LocalTime
End If
DST = GetTimeZoneInformation(TZI)
If AdjustForDST = True Then
GMT = T + TimeSerial(0, TZI.Bias, 0) + _
IIf(DST = TIME_ZONE_DAYLIGHT, TimeSerial(0, TZI.DaylightBias, 0), 0)
Else
GMT = T + TimeSerial(0, TZI.Bias, 0)
End If
ConvertLocalToGMT = GMT
End Function
Function DaylightTime() As TIME_ZONE
Dim TZI As TIME_ZONE_INFORMATION
Dim DST As TIME_ZONE
DST = GetTimeZoneInformation(TZI)
DaylightTime = DST
End Function
Andy