dポイントプレゼントキャンペーン実施中!

下の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

A 回答 (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として、これらの関数を使うプログラマは少ないだろうとは思いますが、これらすべて危なくて使えませんね。
    • good
    • 0
この回答へのお礼

Wendy02さま、いつもありがとうございます。
なるほど開発途中で投げ出してしまった関数ですか、面白いですね。
使わないようにします。

お礼日時:2010/02/19 14:51

検索を掛けてみたところ、関数によって"w"の扱い方がマチマチのようで。




DataAdd関数の場合、DatePartと同じ時間間隔として扱われるらしく、この場合だと"w"は曜日を数値化したものという意味のようで。
DataAdd関数上では"d"と同じ動きになるようです。

MS自体が仕様と言っちゃってるみたいなので仕様なんでしょう^^;

なので引数としては認識するものの、非対応という感じかと。

参考URL:http://support.microsoft.com/kb/115489/ja
    • good
    • 0
この回答へのお礼

いろいろやってましたら、ほかにも、"y" があり、「年間通算日」だそうですが、これもまったく同じ答えを返します。
"d"の「日」はよくわかるのですが、"w"の「週日」というのは理解不能です。普通、週日といったらWeekday(平日)のことですよね。

お礼日時:2010/02/18 15:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!