Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11697 / 13644 ツリー ←次へ | 前へ→

【14459】利息の計算がしたいのですが・・・ 未熟者 04/5/30(日) 3:51 質問[未読]
【14462】Re:利息の計算がしたいのですが・・・ かみちゃん 04/5/30(日) 9:26 回答[未読]
【14502】Re:利息の計算がしたいのですが・・・ 未熟者 04/5/31(月) 0:41 お礼[未読]
【14672】Re:利息の計算がしたいのですが・・・ かみちゃん 04/6/4(金) 7:33 回答[未読]

【14459】利息の計算がしたいのですが・・・
質問  未熟者  - 04/5/30(日) 3:51 -

引用なし
パスワード
   こんにちは。

仕事で利息の計算をやることになりまして、VBAで
自動計算できないものかと思っております。

例えば起算日5/31として、期日が9/20とします。
その日数を求めたいのですが、9/20は祭日なので、計算上は9/21という感じに
1日増やしたいのです。
(この場合は日数113日が114日になります)

土曜日・日曜日・祭日が期日である場合、その日数分加算した日数を求めたいのですが、何かよい方法はないでしょうか?

祝日は、祝日(19)という配列を用意してその中に格納してあります。
この配列を使って実現したいのですが・・・
土曜日・日曜日だけならWEEKDAY関数を使えばよいのかと思うのですが、
祭日が絡んでくると色々なケースが考えられます。

金曜日が期日で、祭日ならば 金・土・日 でしかも月曜日も祭日だったりする可能性も考えられます。


お分かりになる方、どうぞご教授よろしくお願いいたします。

【14462】Re:利息の計算がしたいのですが・・・
回答  かみちゃん  - 04/5/30(日) 9:26 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>土曜日・日曜日・祭日が期日である場合、その日数分加算した日数を求めたいのですが、何かよい方法はないでしょうか?

1.期日が土曜日だったら、1日加算する。
2.期日が日曜日だったら、1日加算する。
3.期日が祝日だったら、1日加算する。
1.2.3.でもなければ、加算を終了して、期日が求まる。
ということになると思います。

そこで、祝日の判定をどうするかがポイントだと思います。
祝日(19)という配列がどういうものかわかりませんが、ハッピーマンデー法(成人の日、海の日、敬老の日、体育の日)や、春分の日や秋分の日など年によって一定でないものに対応しているのでしょうか?振替休日はどうでしょうか?

そういうのがありますので、私は、次のktHolidayName関数を利用しています。
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#VBA
これは、平成15年1月1日までに施行された「国民の祝日に関する法律」に対応しています。
http://www8.cao.go.jp/hourei/jobun/holiday.html

使い方ですが、
ktHolidayName("2004/5/5")
とすると、「子供の日」となります。
ktHolidayName("2004/5/30")
とすると、""となります。
つまり、
If ktHolidayName("日付文字列")<>"" Then
 祝日(振替休日を含む)である
else
 祝日(振替休日を含む)でない
End If
で判定することができます。

また、利息を計算したいということですが、土日祝日以外に独自の休業日などはないのでしょうか?

余談ですが、新たな祝日法改正案(昭和の日)の問題や、現行の『祝日法』で定められている祝日等の情報について紹介されていますので、参考にしてください。
http://www.h3.dion.ne.jp/~sakatsu/holiday_topic.htm
http://www.h3.dion.ne.jp/~sakatsu/holiday_topic3.htm
また、「春分の日」と「秋分の日」については、前年の2月1日に官報に記載される「暦要綱」で正式決定となります。
http://www.nao.ac.jp/J/QA/faq/a0301.html

【14502】Re:利息の計算がしたいのですが・・・
お礼  未熟者  - 04/5/31(月) 0:41 -

引用なし
パスワード
   かみちゃんさん、お返事遅れて申し訳ありません。

たいへん丁寧なご回答を頂き、心よりお礼申し上げます。

かみちゃんさんに教えて頂いたサイト、実は私も見た事があるのですが、
何だか難しくて理解できなかったのでそのときは放置しておりました(笑

かみちゃんさんのご説明で何とか分かりまして、自分の作ったVBAにテスト追加
してみました。
これなら、祝日も土日も、簡単な記述で判定できるんですね。
ありがとうございました!!

・・・ちょっと分からない点がまだありまして・・・

ご指摘の通り、銀行の休日を判断したいのですが、
12月31日も銀行ってお休みですよね?
任意の日付を休日とする判定を入れるには、どうすればよいのでしょう。
サイトに書いてあった土日の判定のところに追加すればよいのでしょうか?
毎年の12月31日を休日としたいのですが・・・

もしよろしければ、またご教授お願いします。

【14672】Re:利息の計算がしたいのですが・・・
回答  かみちゃん  - 04/6/4(金) 7:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

お返事大変遅れまして、申し訳ありません。

>ご指摘の通り、銀行の休日を判断したいのですが、
>12月31日も銀行ってお休みですよね?
>任意の日付を休日とする判定を入れるには、どうすればよいのでしょう。
>サイトに書いてあった土日の判定のところに追加すればよいのでしょうか?
>毎年の12月31日を休日としたいのですが・・・

祝日判定関数に直接記述を追加するのは、オススメしません。
また、これは、土日は判定しませんので、ご注意ください。
それで、銀行休業日等独自の休業日を追加するのであれば、次のようにすればいいと思います。

'ktHolidayName関数は、次のURLを参照
'http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#VBA
If ktHolidayName("日付文字列")<>"" Then
 祝日(振替休日を含む)である
else
 '祝日(振替休日を含む)でない場合
 If Weekday(DateValue("2004/6/6"))=7 Or Weekday(DateValue("2004/6/6"))=1 Then
  MsgBox "土曜日または日曜日"
 Else
  Select Case Format(DateValue("日付文字列"), "mmdd")
   Case "0102", "0103", "1231"
    MsgBox "銀行休業日"
   Case Else
    MsgBox "銀行休業日でない"
  End Select
 End If
End If

ただし、あくまで、日付が特定されている場合の処理です。
休業日が変動するような場合があるのであれば、非営業日テーブルのようなものを設けたほうがいいと思います。

11697 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free