GMTは、世界の基準時間であるグリニッジ子午線時間の頭字語です。イギリスのグリニッジでの時間であり、「ズールー時間」と呼ばれることもあります。 (これは特に航空用語に当てはまります。GMTタイムゾーンは「Z」と省略されることが多く、その音声名はズールー語です。)

ワークシートで現地時間をGMTに変換する必要がある場合があります。時刻が現地時間で入力されることが常にわかっている場合、これは数式を使用して非常に簡単に行うことができます。たとえば、セルB7に現地時間を入力していて、太平洋時間帯にいるとします。このタイムゾーンでは、夏時間が有効かどうかに応じて、GMTより7時間または8時間遅れています。次の式は、時間に関連付けられた日付が夏時間の期間内であるかどうかに応じて、B7に入力された時間を7時間または8時間調整します。

=IF(AND(B7>=DATEVALUE("3/8/2009 02:00"),B19<= DATEVALUE("11/01/2009 02:00")),B7+7/24,B7+8/24)

セルに時刻を入力すると、Excelによって自動的に日付が添付されることに注意してください。したがって、セルに10:15の時刻を入力し、入力した日が1月17日である場合、Excelはセルのエントリを2009年1月17日10:15:00に自動的に変換します。これは、セルに時刻のみを表示している場合でも実行されます。Excelでは、すべての日付に時刻が関連付けられており、すべての時刻に日付が関連付けられています。

この入力動作のため、Excelは、時刻(今日の日付)または明示的に入力できる日付を入力するときに、デフォルトの日付に基づいて適切な調整を行うために、今示した式を使用します。

この定型的なアプローチの唯一の欠点は、夏時間の境界日を年ごとに変更することを忘れないでください。

(数式内のものは2009年のものです。)次のように、E1やE2などのセルに境界日付を実際に格納するように数式を変更できます。

=IF(AND(B7>=$E$1,B19<=$E$2),B7+7/24,B7+8/24)

数式は短くなりますが、夏時間がいつ開始および終了するかを静的に決定するという問題があります。その情報を手動で更新することを忘れないでください。さらに、別のタイムゾーンに移動する場合は、日付と時刻を調整する値を変更することを忘れないでください。

これらの欠点を回避するための本当に便利な方法は、Windowsインターフェイスにアクセスし、コンピューターのシステム設定を決定するユーザー定義関数を作成することです。システムは、夏時間と現在のタイムゾーンを自動的に追跡します。ユーザー定義関数を介してこの情報にアクセスすると、ワークシート内のこれらの項目について心配する必要がなくなります。次のマクロを使用して、それを実行できます。

Option Explicit

Public Declare Function SystemTimeToFileTime Lib _   "kernel32" (lpSystemTime As SYSTEMTIME, _   lpFileTime As FILETIME) As Long

Public Declare Function LocalFileTimeToFileTime Lib _   "kernel32" (lpLocalFileTime As FILETIME, _   lpFileTime As FILETIME) As Long

Public Declare Function FileTimeToSystemTime Lib _   "kernel32" (lpFileTime As FILETIME, lpSystemTime _   As SYSTEMTIME) As Long

Public Type FILETIME     dwLowDateTime As Long     dwHighDateTime As Long End Type

Public 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

Public Function LocalTimeToUTC(dteTime As Date) As Date     Dim dteLocalFileTime As FILETIME     Dim dteFileTime As FILETIME     Dim dteLocalSystemTime As SYSTEMTIME     Dim dteSystemTime As SYSTEMTIME

dteLocalSystemTime.wYear = CInt(Year(dteTime))

dteLocalSystemTime.wMonth = CInt(Month(dteTime))

dteLocalSystemTime.wDay = CInt(Day(dteTime))

dteLocalSystemTime.wHour = CInt(Hour(dteTime))

dteLocalSystemTime.wMinute = CInt(Minute(dteTime))

dteLocalSystemTime.wSecond = CInt(Second(dteTime))



Call SystemTimeToFileTime(dteLocalSystemTime, _       dteLocalFileTime)

Call LocalFileTimeToFileTime(dteLocalFileTime, _       dteFileTime)

Call FileTimeToSystemTime(dteFileTime, dteSystemTime)



LocalTimeToUTC = CDate(dteSystemTime.wMonth & "/" & _       dteSystemTime.wDay & "/" & _       dteSystemTime.wYear & " " & _       dteSystemTime.wHour & ":" & _       dteSystemTime.wMinute & ":" & _       dteSystemTime.wSecond)

End Function

これは、システムコールを操作するときによくあることですが、印象的なように見えるかもしれませんが、すばらしい働きをします。参照される3つのシステムルーチンがあります(SystemTimeToFileTime、LocalFileTimeToFileTime、およびFileTimeToSystemTime)。通話を設定して順番に使用することで、日付と時刻が自動的にGMTに調整されます。この関数を使用するには、ワークシートでこれを入力してセルB7の時間を変換します。

=localtimetoutc(B7)

セルを日付/時刻としてフォーマットすると、出力はまさに希望どおりになります。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(12238)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。

Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります: