- ベストアンサー
エクセルVBAでDateAddのインターバルで"w"は何でしょう?
下の2つのマクロはまったく同じ答えを返します。 "d"は日を加算なので1日づつ増えていくのはわかりますが、"w"はなんなのでしょうか?"ww"が一週間づつ増えるのもわかるのですが「○週目を返す」という"w"の意味がわかりません。 ( ̄∇ ̄) ? Sub test01() dtDate = "2010/01/11" Debug.Print DateAdd("d", 1, dtDate) Debug.Print DateAdd("d", 2, dtDate) Debug.Print DateAdd("d", 3, dtDate) Debug.Print DateAdd("d", 4, dtDate) Debug.Print DateAdd("d", 5, dtDate) Debug.Print DateAdd("d", 6, dtDate) Debug.Print DateAdd("d", 7, dtDate) End Sub Sub test02() dtDate = "2010/01/11" Debug.Print DateAdd("w", 1, dtDate) Debug.Print DateAdd("w", 2, dtDate) Debug.Print DateAdd("w", 3, dtDate) Debug.Print DateAdd("w", 4, dtDate) Debug.Print DateAdd("w", 5, dtDate) Debug.Print DateAdd("w", 6, dtDate) Debug.Print DateAdd("w", 7, dtDate) End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 海外の掲示板でも同じ質問が出ていますが、MVPの偉い回答者さんも、あまり切れ味のある解答してないようですね。(押しなべて、国内外のMVPの方のコメントは切れ味が今ひとつですね。ワークシート関数でも、おかしなものがあります。) これは、Access 側の問題のようですが、少し調べてみました。 #1さんの紹介した http://support.microsoft.com/kb/115489/ja を読むと、Interval の "w" は、本来は、ワークシート関数のWorkday のように、日付を足して、Weekday を探すのが目的だったようですが、それができていないようです。 たぶん、DateDiff等と共にできたもののようですが、DateDiff は、Interval の"w" に、違いがあるのに、DateAdd にはないようです。Excelでは、Workday 関数(VBA側では、参照設定、FUNCRES.XLAが必要)で、出来ます。 "y" は、もともと、年の日付を出すものであって、こちらは、DateAdd も DateDiff も両方とも出来ていないようです。これで、「仕様です (by design)」ということはないですね。だったら、言い訳なんて必要ないのですから。たぶん、開発途中で投げ出してしまったのだろうと思います。車だったらリコールなのですが……。 別に、Excel側では、VBAとして、これらの関数を使うプログラマは少ないだろうとは思いますが、これらすべて危なくて使えませんね。
その他の回答 (1)
- MRT1452
- ベストアンサー率42% (1391/3293)
検索を掛けてみたところ、関数によって"w"の扱い方がマチマチのようで。 DataAdd関数の場合、DatePartと同じ時間間隔として扱われるらしく、この場合だと"w"は曜日を数値化したものという意味のようで。 DataAdd関数上では"d"と同じ動きになるようです。 MS自体が仕様と言っちゃってるみたいなので仕様なんでしょう^^; なので引数としては認識するものの、非対応という感じかと。
お礼
いろいろやってましたら、ほかにも、"y" があり、「年間通算日」だそうですが、これもまったく同じ答えを返します。 "d"の「日」はよくわかるのですが、"w"の「週日」というのは理解不能です。普通、週日といったらWeekday(平日)のことですよね。
お礼
Wendy02さま、いつもありがとうございます。 なるほど開発途中で投げ出してしまった関数ですか、面白いですね。 使わないようにします。