エクセルで、受取手形の支払期日を計算するVBAを紹介します。
締日、手形サイト、回収サイトなどから計算します。
経理の仕事でとにかく作業量が多い仕事
- 売掛金に対する入金処理
- 買掛金に対する支払処理(請求書チェック含む)
- 請求書発行
- 小口現金管理(領収書チェック含む)
考えただけでも憂鬱になります。
しかもこれらの業務は、それぞれ1か月のうち短期間に集中します。それがいわゆる「月末月初」。有給休暇なんて取ろうもんなら白い目で見られます。
入金処理の詳細
作業量が多い仕事はそれぞれ、会社によって独自性があります。その中で今回は入金処理の一部を取り上げたいと思います。
入金業務の内訳
- 振込人名から得意先を特定する(会社独自の得意先コードを付与する)
- 振込手数料、契約歩引、買掛金相殺額、その他費用など入金時に引かれているものを調べる。
- それらを勘案しても請求金額と合わない場合、過不足の内訳を調べる。
- 複数の得意先コード分が一括して入金されている場合(営業所分など)、得意先コードごとに入金金額を振り分ける。
- 社内の基幹システムへ入金入力をする。
- 入力が正しいかチェックをする。
月末ともなると何百件、何千件という入金を1日もしくは2日で処理しないといけません。しかも毎月その苦行はやってきます。
入金の金種
売掛金に対する入金は振込に限りません。
- 現金
- 小切手
- 振込
- 手形
- でんさい
など多岐に渡ります。
現金、小切手、振込は金種は違いますが作業としてはほぼ一緒です。
では手形やでんさいは、それらと何が違うかというと、これらには支払期日というものがあり、入金時には記載された支払期日が正しいものかどうかのチェックをしないといけません。
この支払期日が曲者なのです。
支払期日について
支払期日とは
会社と会社が売り買いを始める時、基本的には売買契約を結びます。その売買契約には支払いについても記載されます。
例えば、
- 毎月末日で締めて翌月末日に支払う(末日締め翌末日支払い)
- 毎月20日で締めて翌々月20日に支払う(20日締め翌々20日支払い)
などです。
そして、支払方法も「振込」や「手形」などと記載されます。
手形の場合はさらに手形サイトがあり、「締日起算90日後」や「支払日起算100日後」などと記載されます。これをもとに手形を振り出す際の支払期日が決まります。
支払期日を計算するとは
さて、いよいよ本題の支払期日を計算します。
もし単純に締日に対して手形サイト日数を足すだけであれば、簡単ですよね。
1/31締 サイト30日 →3/2(閏年であれば3/1)
3/20締 サイト30日 →4/19
6/20締 サイト30日 →7/20
エクセルの式についても、”=「締日」+「手形サイト」”で終わりです。
でもこれでは実務が煩雑すぎるんです。キャッシュフローが大変なんです。
そのため、ほとんどが1か月を30日として計算します。先ほどの例でいうと
1/31締 サイト30日 →2/28(閏年であれば2/29)
3/20締 サイト30日 →4/20
6/20締 サイト30日 →7/20
といった具合にすっきりします。
でもこれでは手形期日の計算が複雑なんです。指を折って計算するのなら意外と簡単ですが、式を組むとなるとかなり手ごわいです。
ではやってみましょう!
手形期日を計算する式
手形期日を計算する式
締日とサイトがある場合
例:2列目
締日:2020/10/20 手形サイト:90日 の場合、支払期日:2021/1/20 を求める
セルC2には次の式を記入する。
=IF(DAY(A2+1)=1,EOMONTH(A2,QUOTIENT(B2,30))+MOD(B2,30),EOMONTH(EOMONTH(A2,-1),QUOTIENT(DAY(A2)+B2,30))+MOD(DAY(A2)+B2,30))
手形期日を計算する式の解説
if もし
- 真:DAY(A2+1)=1 (「締日」の翌日が翌月1日だったら)
- 偽:DAY(A2+1)<>1 (「締日」の翌日が翌月1日でなかったら)
真の場合:
EOMONTH(A2,QUOTIENT(B2,30)) (「サイト」を30で割った「商」の数ヶ月後に)
+MOD(B2,30) (「サイト」を30で割った「余り」の日数を足す)
偽の場合:
EOMONTH(EOMONTH(A2,-1),QUOTIENT(DAY(A2)+B2,30))(「締日」の前月末の、「締日」の日にちに「サイト」を足したものを30で割った「商」の数ヶ月後に)
+MOD(DAY(A2)+B2,30) (「締日」の日にちに「サイト」を足したものを30で割った「余り」の日数を足す)
支払条件から計算する場合
例:2行目
支払条件:毎月20日締 手形回収日:翌月20日 手形サイト:90日(本日が11/20の場合)
※月末日=99 翌月=1 翌々月=2 などとする
E2には次の式を記入する。
=IF(A2=99,DATE(YEAR(NOW()),MONTH(NOW())-C2+1,0),DATE(YEAR(NOW()),MONTH(NOW())-C2,A2))
支払条件から計算する式の解説
if もし
- 真:A2=99 (「締日」が月末だったら)
- 偽:A2<>99 (「締日」が月末でなかったら)
真の場合:
DATE(YEAR(NOW()),MONTH(NOW())-C16+1,0) (「今年」の「今月から受取月ヶ月前の翌月」、これの前月月末日)
偽の場合:
DATE(YEAR(NOW()),MONTH(NOW())-C16,A16)(「「今年」の「今月から受取月ヶ月前」、これの「締日」の日)
締日を計算しましたので、先ほどの「締日とサイトがある場合」と合わせて手形期日の計算をするとわかりやすいと思います。
手形期日を計算するVBA
先ほどの式の場合と同じ条件で記入しました。
マクロにすると表記が変わる部分がありますが、手順は同じです。計算結果が入る「セルF2」の書式設定は日付にしてください。
Sub 期日計算()
Dim s As Date
Dim ShimeD, RecieveM, Site As Long
ShimeD = Range(“A2”)
RecieveM = Range(“C2”)
Site = Range(“B2”)
If ShimeD = 99 Then
s = DateSerial(Year(Date), Month(Date) – RecieveM + 1, 0)
Range(“F2”) = Application.WorksheetFunction.EoMonth(s, Site ¥ 30) + Site Mod 30
Else
s = DateSerial(Year(Date), Month(Date) – RecieveM, ShimeD)
Range(“F2”) = Application.WorksheetFunction.EoMonth(Application.WorksheetFunction.EoMonth(s, -1), (Day(s) + Site) ¥ 30) + (Day(s) + Site) Mod 30
End If
End Sub
コメント