【EXCEL VBA】UTC時刻とJST時刻を変換したい

UTC時刻とJST時刻を変換する方法を紹介します。以前記事でUTC時刻を取得する方法を紹介しました。少し応用するのみです。

WbemScripting.SWbemDateTimeで解決する

UTC時刻を取得した時と同様にWbemScripting.SWbemDateTimeを利用します。時刻取得時にGetVarDateの引数(True/False)で、ローカル時刻取得かUTC時刻取得かを選択できました。

時刻設定時も引数(True/False)で、ローカル時刻設定かUTC時刻設定かを選択できます。GetVarDate (True/False)、SetVarDate(True/False)の4パタンを組み合わせることで、UTC時刻とJST時刻の変換が可能となります。

サンプルプログラムを確認する(コピペOK)

Option Explicit

Sub sample()
   
    Dim wmDate As Object
    Set wmDate = CreateObject("WbemScripting.SWbemDateTime")
    
    Dim d As Date
    d = #7/3/2022 2:00:00 AM#
    
    ' ローカル時刻として設定し、ローカル時刻として出力
    wmDate.SetVarDate d, True
    Debug.Print Format(wmDate.GetVarDate(True), "yyyy/mm/dd hh:nn:ss")      ' 2022/07/03 02:00:00
    
    ' ローカル時刻として設定し、ローカル時刻として出力
    wmDate.SetVarDate d, True
    Debug.Print Format(wmDate.GetVarDate(False), "yyyy/mm/dd hh:nn:ss")     ' 2022/07/02 17:00:00
    
    ' UTC時刻として設定し、ローカル時刻として出力
    wmDate.SetVarDate d, False
    Debug.Print Format(wmDate.GetVarDate(True), "yyyy/mm/dd hh:nn:ss")      ' 2022/07/03 11:00:00
    
    ' UTC時刻として設定し、UTC時刻として出力
    wmDate.SetVarDate d, False
    Debug.Print Format(wmDate.GetVarDate(False), "yyyy/mm/dd hh:nn:ss")     ' 2022/07/03 02:00:00

End Sub