ACLでの時間計算:関数編
執筆者 上野 哲司
マネージャー
■国際認定CAATs技術者(ICCP)
■公認会計士
■システム監査技術者
大手監査法人において、公認会計士として上場企業等に対する財務諸表・内部統制監査およびシステム監査業務に従事。2020年より三恵ビジネスコンサルティング株式会社に入社し、現在は、CAATs導入支援やCAATs技術者の育成に関する研修講師を担当。
労務監査など、データ分析を実施するにあたり、時間に関する計算を行う場面に遭遇することがありますよね。
そこで今回は、「時間計算(時刻計算)にかかる関数」について発信したいと思います。
なお、日付時刻に関する他の情報も発信しております。
本編を確認する前に「●ACLでの時間計算:基本編」をご一読されますとより理解が深まると思います。
●ACLでの日付計算:基本編
●ACLでの日付計算:関数編
●ACLでの時間計算:基本編
●目次
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
(1)ACLで用意されている時間に関する関数一覧
(2)時間に関する関数は、データ型の変換がメイン
(3)データ型変換に関する関数の使い方
(3-1)日付時刻型 → 数値型(HOUR関数、MINUTE関数、SECOND関数)
(3-2)日付時刻型 ← 数値型(STOT関数)
(3-3)日付時刻型 → 文字型(TIME関数)
(3-4)日付時刻型 ← 文字型、数値型(CTOT関数)
(4)24時間を超える時間(時刻)を表示する
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
(1)ACLで用意されている時間に関する関数一覧
ACLには、「日付や時刻に関する関数」が数多く用意されており、主に時間(時刻)を扱う関数をまとめると下表となります。
※ACLでは、パラメーターが<>書きされている場合は省略可能であることを表しております。
上表を見てみると、日付時刻に関する関数のほとんどは、実は「データ型の変換」に関する関数になっています。そこで、データ型変換の関係を(2)にまとめてみました。
(2)時間に関する関数は、データ型の変換がメイン
上記の表からも分かりますが、ACLにおける日付時刻に関する関数は、「データ型の変換」に関する関数がメインとなっています。
以下に、各データ型における変換に関する関数を記載しております。
時間計算では、シリアル値で計算した結果を上記のデータ型変換を上手に使って表示したい形式に整えていく必要があります。
(3)データ型変換に関する関数の使い方
上述のデータ型変換のうち、特に時間(時刻)に関する関数を説明していきます。
(3-1)日付時刻型 → 数値型(HOUR関数、MINUTE関数、SECOND関数)
日付時刻型のデータから、時間や分、秒を数値型で取得します。
例えば、深夜時間帯(0時~6時など)に入力された時間を抽出したい場合に、「時間部分を取得してフィルタをかける」といった手続や、「30分以上の場合は、+1時間する」といった加工処理に使用できます。
●HOUR関数
・機能:時刻または日付時刻から時間を抽出し、24 時間制の数値として返します。
・構文:HOUR(①時刻または日付時刻)
①:主に、「時間」を数値型として取得したいフィールドや演算式等を指定します。
●MINUTE関数
・機能:時刻または日付時刻から分を抽出し、24 時間制の数値として返します。
・構文:MINUTE(①時刻または日付時刻)
①:主に、「分」を数値型として取得したいフィールドや演算式等を指定します。
●SECOND関数
・機能:時刻または日付時刻から秒を抽出し、24 時間制の数値として返します。
・構文:SECOND(①時刻または日付時刻)
①:主に、「秒」を数値型として取得したいフィールドや演算式等を指定します。
●ACLスクリプト例
(A)日付時刻フィールドから「時間」を数値型で取得(HOUR関数)
(B)日付時刻フィールドから「分」を数値型で取得(MINUTE関数)
(C)日付時刻フィールドから「秒」を数値型で取得(SECOND関数)
(3-2)日付時刻型 ← 数値型(STOT関数)
数値型(シリアル値)のデータを日付時刻型で表示します。
例えば、時間計算(退社時刻 - 出社時刻などの時間の差)の結果、シリアル値で表示されてしまったフィールドを「HH:MM:DD」の形式で表示したい場合に使用します。
●STOT関数
・機能:シリアル値を時刻値に変換します。"Serial to Time" の省略形です。
・構文:STOT( ①シリアル値 )
①:時刻表示したいシリアル値(フィールドや演算式)を指定します。
※小数部分(時刻部分)のみ時刻表示にする関数です。
●ACLスクリプト例
例)出社時刻と退社時刻の差を取得して、勤務時間を取得したい(日付時刻ー日付時刻)場合
演算フィールドを利用して、「退社時刻ー出社時刻」といった演算式が入ったフィールドを追加することで、勤務時間を算定することができます。
ただし、「退社時刻ー出社時刻」だけでは、計算結果はシリアル値で表示されてしまいます。
そこで、シリアル値で表示されてしまった演算フィールドを「HH:MM:DD」の形式で表示したい場合にSTOT関数を使用します。
(3-3)日付時刻型 → 文字型(TIME関数)
日付時刻型のデータを文字型に変換します。
例えば、時間計算の結果に、文字を追加したい場合や、2つの時間を一緒に表示したい場合に使用します。
日付時刻型では表示できないため、文字型に変換する必要があります。
●TIME関数
・機能:日付時刻型データから日付を抽出して文字型に変換します。
・構文:TIME(①<時刻/日付時刻> ➁<,書式>)
①:文字型に変換したい日付時刻型のフィールドや演算式を指定します。
➁:表示されている書式(例えば "HH:MM:SS" )を指定します。
当該関数の場合、書式はしっかりと指定することをおススメします。
※①➁の両方を省略した場合は、現在時間(OSの時刻)が文字型で返されます。
●ACLスクリプト例
例)出社時刻と退社時刻を「~」でつないで一緒に表示する場合
(3-4)日付時刻型 ← 文字型、数値型(CTOT関数)
文字型のデータを日付時刻型に変換します。
例えば、データクレンジングのために文字型や数値型に変換したデータを日付時刻型に戻す場合に使用します。
●CTOT関数
・機能:文字型、数値型のデータを日付時刻型(時刻型)に変換します。
・構文:CTOT(①文字/数値)
①:日付時刻型(時刻型)に変換したい文字型や数値型のフィールドや演算式を指定します。
●ACLスクリプト例
(A)文字型の「18:21:14」を日付時刻型に変換(CTOT関数)
(B)数値型の「182114」を日付時刻型に変換(CTOT関数)
(4)24時間を超える時間(時刻)を表示する
労務監査などでデータ分析を行っている場合に、「前回の退社時刻」から「次の出社時刻」を差し引いて、「休息時間」を計算することがあります。
この場合、「次の出社時刻」 - 「前回の退社時刻」で算定しますが、24時間を超えた時間となるケースが少なくありません。
そこで、24時間を超えて「休息時間」を表示したい場合の方法をご紹介いたします。
例)下記の出退勤情報を入手した際に、「27:00:00」と表示したい場合
前回の退社時刻:2021/05/30 6:00:00
次の出社時刻 :2021/05/31 9:00:00 ※退社から出社までの時間 = 27時間
ACLの日付時刻型のデータでは、24時間を超える時間を表示できないため、普通に計算した場合は、下記のようにシリアル値で表示されてしまいます。
そこで、シリアル値を下記のように整数部分と小数部分を分けてから、「日数」と「時」部分で「27時」を算定し、その後に「分」および「秒」部分をくっつけて文字型で表示します。
【具体的な手順】
上記を一発で実行する場合は、下記になります。
もちろん、他の方法もありますので、上記の考え方を利用していただき、ご自身に合うやり方を発見していただければと思います。
※もし、もっと良い方法がありましたら、是非とも教えてくださいね。
少しでも日付計算や時間計算のお役に立てましたら嬉しいです。