[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.