<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--「今月のデータ」だけ取り出したい



■「今月のデータ」だけ取り出したい 1/2

これは、クエリの抽出条件でうまいこと関数を使ってやろう、っていうお話です。
そういうときも、日付を操作する関数が役に立ちそうですので、いろいろご紹介しますね。

請求書の出力とか、「今月の分だけ抽出したい」なんてこと、ありそうですよね。そういう場合、いろんなやり方があるんですけど・・・。
たとえば、こんな感じの↓テーブルがあるとします。
「日付」というフィールドに注目して、「今月の分」だけ取り出すようにしようと思うんです。



で、こんな感じのクエリ作ったとして、「日付」の抽出条件に


Between 2000/08/01 And 2000/08/31

と入力してやります。
ところどころスペースが空きますので、注意して入力してくださいね。全部つなげて入力してはいけませんよ。
・・・って、そんな人はいないと思いますけれど・・・。
Between and については、ヘルプで基本的な書き方など確認しておいてください。



日付はスラッシュかハイフンで区切って、年/月/日(年-月-日)って表現するのは、Windows上でのお約束ですよね。
大文字小文字は自動的に調節されますからどっちでもよいですが、半角で入力します。全角で入力しないよう注意してくださいね。

じゃ、このクエリ開くとどうなるかっていうと・・・。左上にあるデータシートビューへの切り替えボタンをクリックしましょう。データシートビューが開いてきて、とりあえずクエリを実行した結果どんなデータが出てくるか見せてもらえると思います。

いちおう「今月の」というか、指定した範囲の日付を持つレコードだけ、表示されるようになりますよね。

で、また左上の青い三角定規のツールボタンをクリックしてデザインビューに戻ってくると・・・。なんかちょっと#がついたりして微妙に雰囲気変わってますね。まあこれはこのままでよいのであまり気にしないで・・・。



9月になったら

Between 2000/09/01 And 2000/09/30(Between #2000/09/01# And #2000/09/30#)

って、月の部分だけ書き換えてやればいいんですけど・・・いちいちクエリのデザインの画面開いてこんなの入力するの面倒だなぁとか、間違っちゃうかもとか、そういうとき、Date関数っていうのが役に立ちそうだと思いません?

でも・・・このまま条件のとこに関数書いても、多分だめですよね・・・。

このクエリ開いてみても、何も出てきません・・・。

このクエリだと、「日付のフィールドに今日の日付が入力されてるレコードだけ」抽出するって意味になってます。あれば出てくると思いますが、要するに1日分ってことになりますよね。今月1か月分のレコード全部出したいけど・・・。



Date関数使って、なんとかできないもんでしょうか。考えてみましょう。

問題は、日付時刻型のフィールドというのは、最低でも「年月日」の3つのデータを持ってるってとこにあります。
「年月」までいっしょでも、「日」が違えば、イコールではないんですよね。

普段はこれでいいんですけど、「今月のデータだけとにかくほしいんだよ」というときだけ、「日」の部分を切り捨てちゃうとか無視するとかして、「年月」の部分だけを見て抽出してきてくれればありがたいんですけどね・・・。
どんなやり方があるでしょう。

クエリのちょっとした裏技的使い方になるんですけど(というほどのもんでもないか)、抽出用の仮フィールドを作っちゃうってのはどうでしょう。

右端の開いてるとこに、前にご紹介したFormat関数を使って

format(日付,"yyyy/mm")

って感じで、年と月の部分だけ取り出すようにしてやるんです。

そうすると4列目は、

こんなふうに、左側の「日付」フィールドに入ってる日付の年と月の部分だけを取り出して表示する「式1」という列になるんですね。
で、ヨーク見てください。「日付」は右によってますけど、「式1」は左によってますよね。

Windows上では、「日付時刻」と名のつくものはほとんど「数値」として扱われるんです。
でも、Format関数で”yyyy/mm”って感じで取り出した「式1」は、もう文字扱い・・・つまり、「2000/08」という数字と記号がならんだ文字列って扱いになってるんですね。
今すぐ必要な知識ではないかもしれませんけれど、いろいろ作りこんでいくとこういうちょっとしたことが引っかかってくる可能性もあります。ここはひとつ「考え方を養う」ってことで、右端によってると数値、左によってるとテキスト扱いなんだな、データの型が違うんだな、ってとこ、ちょっとだけ頭のスミにおいておいてください。きっといつか役立つと思います。




で、同じく、Format関数をうまく活用して、「今月」という値をひねり出そうと思うんですが・・・。
ひらめいた方いらっしゃいます?

Format(Date(),"yyyy/mm")

これで、Date関数が取ってきた「今日の日付」から「年」と「月」だけ取り出した文字列を作ってくれるんですよね。
じゃ、これを抽出条件のところに入れてやれば・・・。

これで、抽出条件が「今月」ってことになるんですね。
クエリに慣れてない方には、ちょっとややこしいかもしれません・・・。でも、ある程度クエリ作りに慣れてきてる方には、すぐおわかりいただける方法だと思います。
ちょっとわからんなぁ・・・という方は、とりあえずここでは関数の扱い方だけ押さえていただいて、クエリの作り方、役割などについてもう一度おさらいしておいてくださいね。




出ます?

もし、「式1」がウザい〜のであれば、非表示にしちゃいましょう。赤いまるのとこクリックすると、このフィールドは表示されなくなります。

結構スマートな感じになるっしょ。


これで、来月になれば来月のデータだけ、出せるようになるデすよ。
あ、それと、「このテーブルの中には絶対今年のデータしか入ってこないの」っていう場合なら、Format(Date(),"mm")だけでも十分事足りると思います。

その辺はいろいろやってみてください。

とにかく、「日付時刻型とはどういう扱いがなされてるのか」「日付時刻を扱う関数にはどんなものがあるのか」ということを少しずつつめて、これらをうまく利用していっちゃってくださいね。やり方はいろいろありますよ。