top of page

ACLでの日付計算:基本編

%E4%B8%8A%E9%87%8E%E6%A7%98-1_7627_edite

執筆者 上野 哲司

マネージャー

■国際認定CAATs技術者(ICCP)

■公認会計士

■システム監査技術者

大手監査法人において、公認会計士として上場企業等に対する財務諸表・内部統制監査およびシステム監査業務に従事。2020年より三恵ビジネスコンサルティング株式会社に入社し、現在は、CAATs導入支援やCAATs技術者の育成に関する研修講師を担当。

データ分析を実施するにあたり、日付に関する計算を行う場面に遭遇することがありますよね。

例えば、

・特定の日(期末日など)から前後10日間の日付を取得したい(日付+日数、日付-日数)

・売掛金回収予定日からどれだけ経過(滞留)しているか日数を算定したい(日付ー日付)

そこで今回は、「日付計算(日数計算)」に関する情報を発信したいと思います。

なお、今後は下記の情報も発信予定です。

●ACLで日付計算(日数計算)をする~関数編

●ACLで時間計算(時刻計算)をする~基本編

●ACLで時間計算(時刻計算)をする~関数編

●目次

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

(1)ACLにおける日付(日数)計算のやり方

(1-1)日数を加減算する方法

(1-2)2つの日付を比較して、その差(日数)を算定する方法

(注 意)「日付時刻型」でなければ日付計算はできない!

(2)ACLにおける日付時刻型と日付計算の制約

※(2)は、ACLの日付計算を深く理解したい人向けです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

(1)ACLにおける日付(日数)計算のやり方

ACLでは、「日付時刻」型であれば日付(日数)計算をすることができます。

そこで、(1-1)日数を加減算する方法と、(1-2)2つの日付を比較して、その差(日数)を算定する方法をご紹介します。

 (1-1)日数を加減算する方法・・・「日付+日数」 または 「日付-日数」

ある日付に、日数を加算や減算する場合、ACLでは演算フィールドを利用して、「日付」に整数値を加減算することでXX日後の日付を算定できます。​

例)特定の日(期末日など)から前後10日間の日付を取得したい場合

「期末日+10」 または 「期末日-10」といった演算フィールドを追加することで、特定の日から前後10日間の日付を取得できます。

ナレッジ04-①.jpg

 (1-2)2つの日付を比較して、その差(日数)を算定する方法・・・「日付ー日付」

2つの日付の差(日数)を算定する場合、ACLでは演算フィールドを利用して、「日付」-「日付」をすることで日数を算定できます。

例)期末(2020年12月31日)において、売掛金回収予定日からどれだけ経過(滞留)しているか日数を算定したい場合、演算フィールドを利用して、「期末日ー回収予定日」といった演算式が入ったフィールドを追加することで、期末日における売掛金の滞留日数が算定できます。

ナレッジ04-②.jpg

 (注 意)「日付時刻型」でなければ日付計算はできない!

ACLでは、計算対象とする日付の「データ型」が、「日付時刻型」でなければ日付(日数)計算をすることができません。そのため、もし、日付が入っているフィールドのデータ型が「文字型」の場合は正しく計算がされません。

特に、文字型のフィールドは日付時刻型のように表示できてしまうため、データ型が正しく「日付時刻型」になっているかどうか、注意してくださいね。

 ●データ型の確認方法

データ型は、対象テーブルを開いている状態で、《編集》メニューの《テーブルレイアウト》で確認することができます。

ナレッジ04-③.jpg

 ●文字型だった場合の対処方法 

上記のように、もし日付計算をしたいフィールドのデータ型が文字型だった場合は、関数を利用して文字型を日付時刻型に変換することで、日付計算を行うことが可能です。

ナレッジ04-④.jpg

 ※ACLでは、パラメーターが<>書きされている場合は省略可能であることを表しております。

 使用例)「日付_文字型」フィールドを日付時刻型に変換する場合

CTOD(日付_文字型 , "YYYY/MM/DD" )

私は、実務において、計算式で関数をネスト(関数の中に関数を入れ子にして使うこと)するなど、複雑にしてしまったために失敗した経験があります。

特に、日付だけでなく時刻が入っているフィールドの場合は、まずは「CTOD関数」を使って時刻部分を取り除いたフィールドを追加し、その後に日付計算をするなど、慣れるまでは関数をネストせずに、段階に分けて計算式をシンプルにすることをおススメいたします。

(2)ACLにおける日付時刻型と日付計算の制約

※ここからは、少し深い話になりますので、興味がある方だけ・・・。

上述のように、「日付±日数」や「日付ー日付」などの日付計算をしたい場合、ACLでは、日付に関するデータ型である「日付時刻型」で計算を行うことになります。

ただし、同じ「日付時刻型」でも、ACLでは下記のようにいくつか表示方法があり、加減算時に制約があるため注意が必要です。

 ●ACLにおける「日付時刻型」の表示例

(例)2020年1月1日 12時00分00秒

①日付        : 2020/1/1

②時刻        : 12:00:00

③日付時刻      : 2020/1/1 12:00:00

④シリアル値(日数) : 43831.5000000000

【シリアル値について】

シリアル値とは、「1900/1/1」を「1」として、経過した日数を表示する方法です。2020/1/1は、

1900/1/1から43,830日の日数が経過したということですね。

また、12:00:00は、1日の半分(12/24時間)が経過したという意味(=0.5)になります。

 

 ●日付計算(日数計算)の制約

ACLでは日付や時刻の加減算ができますが、上記の表示例①~④のすべてで加減算ができるわけではなく、特に加算においてエラーとなるパターンがあります。

加算の場合:

加算の場合は、「①日付+④シリアル値(日数)」でしか計算ができない!

ナレッジ4-⑤.png

そのため、加算する日数は整数値であることが必要です。

そもそも

「日付+日付」

なんて

しないですね

ナレッジ4-⑦.png

HaHaHa!

減算の場合:

減算の場合は、全てのパターンで計算できます!

ナレッジ4-⑥.jpg

上記のように、計算式に「時刻」が入ってくると、計算結果はシリアル値で表示されるという制約があります。

そのため、CTOD関数を利用して時刻部分を排除してから日付計算を行うことをおススメします。

少し深い話になりましたが、少しでも日付計算(日数計算)のお役に立てればと思います。

bottom of page