[[20031031153112]] 『VBA:datediff関数のinterval設定値yyyyについて』(まきりん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA:datediff関数のinterval設定値yyyyについて』(まきりん)
 いつも、お世話になっています。
 VBA関数のdatediff、intervalの設定をyyyyにした場合に
 年をまたぐと、返ってくる数字がちょっと??になります。

 days = datediff("YYYY",a,b) + (datediff("m",a,b) mod 12) / 12

 で、1.2年とか4.6年と表示したいと考えました。
 ところが、期間が1年未満の場合で、同じ年の中で1年未満だと
 ちゃんと、0.3年とう表示になりますが、年をまたいだ場合
 期間は、同じなのに1.3年とう表示になります。いろいろデータを
 見比べた感じでは、datediff("YYYY",a,b)での戻り値が
 年をまたぐと、1年になってしまうのが原因では…と思うのです。

 どうやって、この現象を回避すれば良いか知恵をお貸し下さい。
 よろしく、お願いします。

 こんちわ。
 こんなんでどうでっか?
     (弥太郎)
 '---------------
 Sub test()
    days = DateDiff("m", Now, "2004/8/20")
    day_a = days Mod 12
    day_b = Int(days / 12)
    data = day_b & "." & day_a
 End Sub

 弥太郎さん、いつもありがとうございます。
 なるほどぉ〜。入れ物をそれぞれに作って代入していけば
 色々出来るんですね。今さらながら、あまりの算数オンチぶりに
 自分でも笑っちゃいます。
 無事解決!!っと言いたいのですが
 確かに、意図した表示にはなるのですが
 平均をとる”数値”として扱いたいので
 このままだと、ちょっと不具合が…。
 スイマセン、説明不足でしたね。

 ちなみに、1年未満で年をまたぐと戻り値が1年になってしまうのは、
 そういう仕様なのでしょうか?
 まあ、原因はともあれ、別の方法で上手くいけばOKなんですが
 少し気になったので。

 もう少しだけ、知恵をお貸し下さいませ。
 よろしく、お願いします!!(まきりん)

 よくよく、考えたら、
 年を表す整数部分を、int(datediff("m",a,b))にすればOKでした。
 スイマセン、お恥ずかしい…。
 もうちょっと、頭の回転が速くなりたい今日この頃(笑)
 めげずに頑張るぞぉ〜(^^ゞ
 今後も、よろしくお願いします。(まきりん)

 まきりんさん、ごめん。あなたの式を良う見たら数値として求めとりますわ、はい。
 その期間を数値でええんやったら、こんなんどないでっか?
 Sub test2()
    days = Application.Round(DateDiff("m", Now, "2004/12/20") / 12, 1)

 End Sub
 又早とちりかしらん。
              (弥太郎)

 弥太郎さ〜ん。度々ありがとう。
 おかげで、無事解決しました。
 チョッとづつですが、考え方のコツのような物が
 分かってきたような気がします。
 これからも、よろしくご指導下さい。(まきりん)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.