GMTへの自動変換(Microsoft Excel)
GMTは、世界の基準時間であるグリニッジ子午線時間の頭字語です。イギリスのグリニッジでの時間であり、「ズールー時間」と呼ばれることもあります。 (ズールー語はゼロの音声名であり、ゼロはイギリスのグリニッジの経度を指します。)
ワークシートで現地時間を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トレーニングのソースです。
このヒント(2185)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。