wanna.jp VBAリファレンス
Top > VBA関数リファレンス > VBA Timeの使い方

VBA Timeで製造ラインのボトルネックを解消!正確な作業タクトタイム計測術

製造ラインの効率化、ボトルネックの特定、そして生産性向上…これらは生産管理の現場で常に直面する課題ではないでしょうか。特に、作業タクトタイムを秒単位で正確に計測することは、ムダの発見と改善の第一歩となります。しかし、手作業での記録や既存システムでは柔軟性に欠けることも。そこでVBAの出番です。今回は、VBAの`Time`関数や関連機能を活用し、深夜0時を跨ぐ作業にも対応できる、精度の高い作業タクトタイム計測マクロをご紹介します。

実務で使える!深夜0時対応タクトタイム計測コード

以下のVBAコードは、作業の開始時刻と終了時刻から、その作業にかかった時間を秒単位で計測します。特に、深夜0時を跨いで作業が行われた場合でも、正確な時間を算出するロジックを組み込んでいます。コピペでそのままモジュールに貼り付けて実行可能です。

Sub MeasureTaktTime_Production()
    Dim startTimeStr As String
    Dim endTimeStr As String
    Dim startTime As Date
    Dim endTime As Date
    Dim taktTimeSeconds As Long ' 秒単位で結果を保持

    ' --- ここから設定 ---
    ' [入力例] 作業開始時刻: 14:30:00
    startTimeStr = "14:30:00"

    ' [入力例] 作業終了時刻:
    ' 1. 同日内で終了するケース (例: 14:30:45)
    ' endTimeStr = "14:30:45"

    ' 2. 深夜0時を跨いで翌日に終了するケース (例: 翌日00:05:30)
    '    ※このコードでは、このケースを自動的に判別し、正しく計算します。
    endTimeStr = "00:05:30"
    ' --- ここまで設定 ---

    ' 時刻文字列をVBAのDate型(時刻情報のみ)に変換
    ' TimeValue関数は文字列から時刻部分をDate型で取得します
    startTime = TimeValue(startTimeStr)
    endTime = TimeValue(endTimeStr)

    ' タクトタイムの計算ロジック
    ' 終了時刻が開始時刻より「小さい」場合、深夜0時を跨いで翌日になったと判断します。
    ' その場合、終了時刻に「1日分」(Date型の数値1)を加算することで、
    ' 日付の連続性を補完し、正しい時間差を算出します。
    If endTime < startTime Then
        ' DateDiff("s", 開始時刻, 終了時刻 + 1日) で秒単位の差を計算
        taktTimeSeconds = DateDiff("s", startTime, endTime + 1)
    Else
        ' 通常のケース(同日内の作業)
        taktTimeSeconds = DateDiff("s", startTime, endTime)
    End If

    ' 結果の表示
    MsgBox "作業開始時刻: " & startTimeStr & vbCrLf & _
           "作業終了時刻: " & endTimeStr & vbCrLf & _
           "計測タクトタイム: " & taktTimeSeconds & " 秒", _
           vbInformation, "VBA 作業タクトタイム計測結果"

    ' 必要であれば、秒数を hh:mm:ss 形式に再変換することも可能です。
    ' (例: 86400秒 = 1日)
    ' Dim formattedTaktTime As String
    ' formattedTaktTime = Format(taktTimeSeconds / 86400, "hh:mm:ss")
    ' MsgBox "HH:MM:SS形式でのタクトタイム: " & formattedTaktTime
End Sub

解説:深夜0時を跨ぐタクトタイム計測の落とし穴と回避策

上記のコードでは、この落とし穴を回避するために以下のロジックを採用しています。

  • `TimeValue`関数の利用: 文字列で与えられた時刻(例: "14:30:00")を、VBAが時刻として正しく認識する`Date`型に変換します。これにより、数値としての比較や計算が可能になります。
  • `If endTime < startTime Then ...` 条件分岐: 終了時刻が開始時刻よりも小さい場合(数値として)は、深夜0時を跨いだと判断します。このとき、終了時刻に「1日分」(`Date`型の数値で`1`に相当)を加算して、時間軸の連続性を担保します。 例: endTime + 1
  • `DateDiff`関数の利用: `DateDiff("s", date1, date2)`は、二つの`Date`型の日時間の差を、指定した単位("s"なら秒)で正確に返します。この関数を使うことで、秒単位での精密なタクトタイムを効率的に計算できます。

このロジックにより、どのような時間帯の作業であっても、常に正しいタクトタイムを秒単位で計測することが可能になります。製造ラインの微細なボトルネックを発見し、改善するための強力なツールとなるでしょう。

まとめ

今回はVBAの`Time`関数、そして関連する`TimeValue`関数や`DateDiff`関数を使い、製造ラインにおける作業タクトタイムを秒単位で正確に計測する方法を解説しました。特に、深夜0時を跨ぐ際の落とし穴とその回避策を実装することで、どんな時間帯の作業でも信頼性の高いデータを取得できるようになります。

この計測ロジックを応用すれば、Excelシートと連携してリアルタイムでデータを記録したり、特定の作業工程のボトルネックを可視化したりと、生産管理のDXを強力に推進できます。VBAの力を活用し、製造現場の効率化と生産性向上にぜひお役立てください。

VBAでの業務効率化、悩み解決します

「このマクロ、もっと速くならないかな?」「エラーが消えない…」
Access/VBA専門のwanna.jpにご相談ください。

無料相談はこちら