協定世界時(UTC)を日本標準時(JST)に変換するユーザー定義関数【コード付き】

協定世界時(UTC)を日本標準時(JST)に変換するユーザー定義関数【コード付き】 - アイキャッチ画像
目次

はじめに

Excel VBA を使用してデータを処理する際、時刻情報の取り扱いが重要になります。特に、国際的なデータを扱う場合、協定世界時(UTC)を日本標準時(JST)に変換する処理が必要になることが多いです。本記事では、VBAでUTCからJSTに変換するユーザー定義関数(UDF)を作成し、その使い方や注意点を詳しく解説します。

UTCとJSTの基本

協定世界時(UTC)とは?

協定世界時(UTC: Coordinated Universal Time)は、世界の標準時として使用されており、経度0度のグリニッジ標準時(GMT)を基準とした時刻です。

日本標準時(JST)とは?

日本標準時(JST: Japan Standard Time)は、日本で用いられている標準時で、UTC+9時間の時差があります。つまり、UTCの時刻に9時間を加えることでJSTに変換できます。


VBAによるUTCから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:00Zabcd-ef-ghTij:kl:mnZ)の場合、#VALUE!エラーを返します。
  • 日付が正しく解釈できない場合 (2023-02-30T10:00:00Z など)、#NUM! エラーを返します。

この関数をExcelのセルで =UTCtoJST(A1) のように使用できます。

ユーザー定義関数の使用方法

Excelのセルで使用

  1. ExcelのVBAエディタ(Alt + F11)を開く。
  2. 標準モジュール(Module)を追加し、上記のコードを貼り付け。
  3. Excelのセルで次のように入力。
   =UTCtoJST(A1)

A1にUTC時刻が入力されている場合、JSTに変換された値が表示されます。

VBAコード内で使用

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)を ワークシートのセルで使用する場合は、標準モジュールに保存する必要があります。

標準モジュール(Module1, Module2…)

📌 標準モジュールなら、全シート・他のVBAコードでも使用可能。

  • VBAProject 内の 標準モジュール(Module1 など) に保存すると、どのシートからも =UTCtoJST(A1) のように関数を直接使える。
  • 手順:
    1. VBAエディタ(Alt + F11)を開く
    2. 挿入標準モジュール を選択
    3. 生成された Module1 にコードを貼り付ける

シートモジュール(Sheet1, Sheet2…)

  • Sheet1 などのシートオブジェクトのコード内に関数を記述すると、そのシート内でしか機能しない。
  • =UTCtoJST(A1)他のシートで使えないので非推奨。

ThisWorkbook モジュール

  • ThisWorkbook に保存すると ワークシート関数としては認識されない
  • 他のマクロからは呼び出せるが、ワークシートのセルに =UTCtoJST(A1) と入力しても動作しない。

クラスモジュール

  • ユーザー定義関数(UDF)としては不適切。クラスモジュールはオブジェクトの定義に使うため、ワークシートでの関数利用には向かない。

マクロ有効ブックとして保存

ユーザー定義関数(UDF)を含むExcelファイルは、**「Excel マクロ有効ブック(.xlsm)」または「Excelアドイン(.xlam)」**として保存する必要があります。

通常の .xlsx 形式ではVBAが保存されず、関数が動作しません。

マクロの有効化が必要
ファイルを開いた際に、Excelの「マクロを有効にする」オプションを選択する必要があります。

計算速度・制限

  • 大量のデータを処理すると遅くなる可能性
    VBAのユーザー定義関数(UDF)はネイティブ関数(標準のExcel関数)より遅いため、大量のデータに適用するとパフォーマンスが低下することがあります。
  • Excelの関数で代用可能ならそちらを使う
    VBAを使わずにJSTに変換可能。(ただし、形式チェックが甘くなる)

関数が更新されない場合

VBAのユーザー定義関数(UDF)は通常のExcel関数と異なり、手動再計算が必要な場合があります。
F9 キーを押して再計算
Ctrl + Alt + F9 で全セルを強制再計算
Application.Volatile をVBA内で使用すると、自動再計算が可能(ただし計算が増え処理が重くなる)

まとめ

UTCは世界標準時刻で、日本標準時(JST)はUTC+9時間。

ユーザー定義関数(UDF)を使用するメリット

  • VBAのユーザー定義関数を作成することで、Excelで簡単に時刻変換が可能。
  • セル関数やVBAコード内で関数を活用できる。
  • エラー処理を細かくコントロールできる。

注意が必要な事項

  • ユーザー定義関数(UDF)は標準モジュールに保存すること。
  • .xlsm または .xlam で保存すること(マクロを有効にする必要がある)。
  • 大量データには注意(Excel関数で代用できるならそちらを検討)
  • 手動再計算が必要な場合がある (F9, Ctrl + Alt + F9)

Excel VBAで時刻を正しく管理し、データ処理をよりスムーズに進めましょう!

  • URLをコピーしました!

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

This site uses Akismet to reduce spam. Learn how your comment data is processed.

目次