Excel VBA を使用してデータを処理する際、時刻情報の取り扱いが重要になります。特に、国際的なデータを扱う場合、協定世界時(UTC)を日本標準時(JST)に変換する処理が必要になることが多いです。本記事では、VBAでUTCからJSTに変換するユーザー定義関数(UDF)を作成し、その使い方や注意点を詳しく解説します。
協定世界時(UTC: Coordinated Universal Time)は、世界の標準時として使用されており、経度0度のグリニッジ標準時(GMT)を基準とした時刻です。
日本標準時(JST: Japan Standard Time)は、日本で用いられている標準時で、UTC+9時間の時差があります。つまり、UTCの時刻に9時間を加えることでJSTに変換できます。
VBAでは、Date 型や時間関連の関数を使用して時刻の変換を行えます。以下に、UTCをJSTに変換するユーザー定義関数を紹介します。
Function UTCtoJST(ByVal utcString As String) As Variant
Dim datePart As String, timePart As String
Dim utcDate As Date
' 入力形式チェック
If Not utcString Like "####-##-##T##:##:##Z" Then
UTCtoJST = CVErr(xlErrValue) ' #VALUE! エラーを返す
Exit Function
End If
' "T"と"Z"を除去して日付と時刻を分割
On Error Resume Next
datePart = Split(utcString, "T")(0)
timePart = Left(Split(utcString, "T")(1), 8)
' 日付と時刻を結合し、Date型に変換
utcDate = CDate(datePart & " " & timePart)
If Err.Number <> 0 Then
UTCtoJST = CVErr(xlErrNum) ' #NUM! エラーを返す
Exit Function
End If
On Error GoTo 0
' JST(UTC+9時間)に変換
UTCtoJST = utcDate + TimeValue("9:00:00")
End Function
2006-12-30T10:35:00Z
を入力すると2006/12/30 19:35:00
(JST)に変換されます。2023-03-15 12:00:00Z
やabcd-ef-ghTij:kl:mnZ
)の場合、#VALUE!
エラーを返します。2023-02-30T10:00:00Z
など)、#NUM!
エラーを返します。この関数をExcelのセルで =UTCtoJST(A1)
のように使用できます。
=UTCtoJST(A1)
A1にUTC時刻が入力されている場合、JSTに変換された値が表示されます。
Dim result As Variant
result = UTCtoJST("2006-12-30T10:35:00Z")
Debug.Print result ' 2006/12/30 19:35:00 と表示される
直接文字列を入力する場合は =UTCtoJST("2006-12-30T10:35:00Z")
のようにダブルクォーテーションで囲む必要があります。
#VALUE!
→ 書式が間違っている (2023-03-15 12:00:00Z
など)#NUM!
→ 存在しない日付 (2023-02-30T10:00:00Z
など)=IFERROR(UTCtoJST(A1), "エラー")
のように IFERROR
を使うと、エラー時に別の値を表示可能ユーザー定義関数(UDF)を ワークシートのセルで使用する場合は、標準モジュールに保存する必要があります。
📌 標準モジュールなら、全シート・他のVBAコードでも使用可能。
VBAProject
内の 標準モジュール(Module1 など)
に保存すると、どのシートからも =UTCtoJST(A1)
のように関数を直接使える。Alt + F11
)を開く挿入
→ 標準モジュール
を選択Module1
にコードを貼り付けるSheet1
などのシートオブジェクトのコード内に関数を記述すると、そのシート内でしか機能しない。=UTCtoJST(A1)
を他のシートで使えないので非推奨。ThisWorkbook
に保存すると ワークシート関数としては認識されない。=UTCtoJST(A1)
と入力しても動作しない。ユーザー定義関数(UDF)を含むExcelファイルは、**「Excel マクロ有効ブック(.xlsm)」または「Excelアドイン(.xlam)」**として保存する必要があります。
通常の .xlsx 形式ではVBAが保存されず、関数が動作しません。
VBAのユーザー定義関数(UDF)は通常のExcel関数と異なり、手動再計算が必要な場合があります。F9
キーを押して再計算Ctrl + Alt + F9
で全セルを強制再計算Application.Volatile
をVBA内で使用すると、自動再計算が可能(ただし計算が増え処理が重くなる)
UTCは世界標準時刻で、日本標準時(JST)はUTC+9時間。
ユーザー定義関数(UDF)を使用するメリット
注意が必要な事項
F9
, Ctrl + Alt + F9
)Excel VBAで時刻を正しく管理し、データ処理をよりスムーズに進めましょう!