• ベストアンサー

アクセスでdateserialを使った式の意味と式ビルダ

式の意味がわかりません。問題は「廃棄日」は、DateSerrial関数、year関数及び month関数を使用して「入荷日」の2年後における月末日とする。というものです。答は、 dateserial(year([入荷日]+2,month(入荷日)+1,0)となっていますが、2年後の意味はわかるのですが、何故monthに1を足すのか、dayの部分が0になるのかが、どうしても理解できません。 簡単なことかもしれませんが、どうか教えて下さい。 それと、式ビルダで作成しようとしても、うまく範囲が選択されず、いらない《》や文字が残ったりします。使い方がよくわからないのです。ヘルプを見ても記載されていないので悩んでいます。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

エクセルでも同じなんですが、DDATESERIALはエクセルではDATE関数です。MSの日付の仕組みは、下記のような仕組みとなっています。 ーー アクセスのDATESERIALは、MSの日付シリアル値を求める関数で、 エクセルの場合はDATE関数です。それにはどちらも3つ引数があり =DATE(年、月、日)で年、月、日は数字で指定します。 しかし月、日には常識を超えた扱いをエクセルはします。 (月について) =DATE(2007,14,1)は2008/2/1 =DATE(2007,-1,1)は2006/11/1 =DATE(2007,0,1)は2006/12/1 となります。 (日について) =DATE(2007,7,35)は2007/8/4 =DATE(2007,7,0)は2007/6/30 =DATE(2007,7,-5)は2007/6/25 を返します、 これを逆手にとって利用し、月末日を出すのに使います。 ーー 7月30日 7月31日 8月1日 8月2日 -1 0 1 2 指定された月を中心に考え(に身を移して考えて)、1がその月の1日、0はその前日、-1はまたその前日 といったイメージでしょうか。 こういう数直線的理解でしょう。

Jennifer8
質問者

補足

解答頂きありがとうございます。 とってもわかり易く、やっと式の意味が理解できました。 根本的な意味がわかっていなかった為に、式の意味もわかっていませんでした。 なかなか先に進めなかったのが、光が見えてきました。 ありがとうございました。感謝です。

その他の回答 (2)

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.2

まずは、日付/時刻型の型の話を理解してからの方が関数の意味は判ると思います で、下記のURLで詳しく書いてますので、読んでみてください ↓Microsoft Access で日付/時刻型の値の格納、計算、および比較を行う方法 http://support.microsoft.com/kb/210276/ja で、要するに元々、倍精度浮動小数点数の型で保管され、表示用に日付時刻に換算し使用しているのが、日付/時刻型と呼ばれるものです 単純に、日付で0を指定するのは、それを逆手に取って1日の1日前の月末としているだけです 要するに、翌月の前月月末を、計算しようとしているわけです おそらく、日付/時刻型が、よく理解できてないために出てきた疑問だと思います 他のシステム(BIOS、OS等)ほぼ、同じ様に使用して稼動してますので、覚えておいて、良いかと思います @《》は、真ん中の文字をダブルクリックすると《》の範囲選択されます それから入力すれば、《》から、消えて入力できます

Jennifer8
質問者

補足

解答頂きありがとうございます。 URLも記載いただいたので、詳しく調べることができました。 日付/時刻型は難しいです・・・でもやっと少しずつわかってきました。 式ビルダですが、友人のPCではきちんとダブルクリックで範囲選択できるのですが、私のPCだと、クリックで範囲選択されたり、ダブルクリックすると余計なところまで選択されたりします。ワードやエクセルではそんなことなく、式ビルダだけです・・・インストールしなおそうかと思ってます。 ありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

DateSerial(年,月,日) で「日」を「0」にする事で、先月の月末日になります。 2007/8/10 でMonthを+1しない場合、2009/7/31 になってしまいます。

Jennifer8
質問者

補足

解答頂きありがとうございます。 日が0になる意味がよくわからなかったのですが、0にするなら月を+1にする意味はわかりました。 日付関数って難しいですね・・・