<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--基本操作をさらに考える
   >00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 



もし、「月ごとの売上の合計」を、「売上月ヘッダー」じゃなくて、売上月ごとの一覧の一番下に持ちたい、ということなら、「売上月フッター」を使うとしましょう。
フッターは、デフォルトでは折りたたまれてて見えないんで、出します。出し方はですね・・・ツールバーに、「並べ替え/グループ化」というボタンがありますので、こいつをクリックします。すると・・・。

こういうのが出てきます。



「売上月」のグループフッターを出してみましょう。
ちょっとわかりにくいですが左の図を見ていただきながら、「売上月」のところをクリックして、そのグループのプロパティを下段から設定します。
「グループフッター」を「はい」にすればいいんですね。

すると、「売上月フッター」が現われると思うんですけど・・・いかがでしょう?
で、「売上月ヘッダー」から、「売上月フッター」へお引越しです。ちょっと図ではわかりにくいですけれど・・・。「売上の合計」を計算させてるテキストボックスと「売上月の売上合計」と表示させるためのテキストボックスを、下に移動させてること、おわかりいただけますか???


あとは、テキストボックスやラベルの配置、文字の大きさなど、お好みに合わせて微調整してみてください。レポートって、いろいろ作ってみないとわかりにくいところもたくさんありますから、とにかく使って使って使いまくってみてください。ぐちゃぐちゃになっちゃったらまた作り直せばいいじゃないですか。ね。これ、ほんとに工夫次第って感じのオブジェクトなんで、工夫したもん勝ちですよ。

だいたい落ち着いたら、レポートを保存して閉じて、一息入れましょう。


さて・・・。

「社員テーブル」と「売上明細テーブル」を分けて考えるようにしたという部分、ここまでいかがでしたでしょう。
これによって、「社員テーブル」だけでは残すことのできなかったデータを取ることができるようになりますよね。それプラス、「売上明細テーブル」の中のデータが何千件になろうとも、社員番号をもとに「社員テーブル」と結びつけることで社員一人一人に関する情報も得ることができるようになるので、「売上明細テーブル」の方には必要最低限の入力だけですむ・・・というあたり、体感していただけましたですか???

こうやって分けた時の、結果のお話ですけど、「社員テーブル」みたいな感じのテーブルを「マスター」、「売上明細テーブル」みたいなのを「トランザクション」って呼ぶことがあります。どっちもおんなじように作るテーブルなんですけど、「トランザクション」の中にためたレコードの大モトになる情報、あるいは補足となる情報を持つテーブルを、あえて「マスター」って呼ぶことがありますね。

こういうのも「考え方」なので、あんまり詰め込まなくてもよいと思いますよ。

では・・・ここまで来たら、「テーブルを複数くっつけて使うときの注意点」をお話しないといけないですね。
クエリーの中での、「複数のテーブルの結びつき方」について、ちょっと補足します。

今さっき作った月別の売上一覧レポートが基にしているクエリーを、もう一度デザイン画面で開きましょう。

下の図でいくところの、ピンクの線がついているところ・・・。結合線をダブルクリックしましょう。

こんな感じの画面が出てきます。
ふたつのテーブルの、結びつき方をしるすプロパティなんですけど・・・。

結びつき方が3パターンあること、まず確認してください。んで、多分今は「両方のテーブルの結合フィールドが同じ行だけを求める」ってなってると思います。
つまり「社員テーブルに登録のある社員で、明細テーブルの中で売上の入力のある社員すべて」が、このクエリーでの出力対象となってるわけですね。

この辺は、テーブルの中にどうやってレコードが入ってくるかによるんですけども・・・。

例えば・・・下の図をじっくり見ていただきたいんですが・・・。1か月分だけ、データを取り出して社員事に集計したとします。
左側が、社員ごとに売上を集計したクエリーです。で、右側が、社員テーブル・・・。
あれ、社員番号が0014の人、売上がない・・・ですよね。左側・・・。どうやら0014の人は、この一ヶ月、売上を立てることができなかったみたいですね・・・。

こういうことも考えられますよね。必ずしも全員が均一に毎月データ入力されるとは限らない・・・。

今の状態で、社員テーブルと売上明細のテーブルを結合させると、この月に限っては、0014の人は出てこないことになります。売上がゼロ、という表示もなく、0014の人自体、出てこないのです。
なぜだかはわかりますよね。
「両方のテーブルに社員番号が存在するレコードだけ抽出される」んですよね。今の状態だと・・。

わかりにくいかもしれませんけれど、とっても大切なことなんです。
じっくり見ておいてくださいね。

売上が1件もなくても、とにかく名前だけは表示されるようにしたい・・・という場合は、どちらかのテーブルに主導権を与えます。
今回の場合は、「社員テーブル」の方に主導権を握らせます。こうすることで、例え売上が一件もなくても、社員テーブルに存在している社員なら、とりあえず名前を出すことができるわけです。

逆のパターンもありえますよね・・・。
例えば、社員テーブルには登録のない人が売上を立てた場合・・・。こういう処理をゆるすかどうかは別にして、上の図でいくところの1番の結合方法だと、社員テーブルに登録のない社員は、例え売上が入力されてたとしても出てこないわけですね。

本来は、必ず「どちらかのテーブルに主導権を与える」必要があるんです。データの取りこぼしが起こらないように・・・。

と、クエリのデザイン画面が、こんな感じになります。
矢印がついてますよね。社員テーブルのレコード全部と、それぞれの社員番号と同じ社員番号のレコードを売上明細テーブルから取ってくるよ、ってことです。

これも、あくまでも「考え方」であって、じゃあいつこういう操作をやればいいの???ってなると、一生必要ない人もいるかもしれません。
でも、長いことAccess扱っていると、もしかしたらこういう状況に直面するかもしれませんので、来るべき日のために、ほんの少し、気にかけてあげるようにしてください。

じゃ、このクエリーは閉じましょうか・・・。いちおうお話だけですけども、せっかく結合の状態を変更しましたから、保存しながら閉じるとしましょう。


さて・・・ちょっと余分なお話を・・・。
せっかくですから「今月一か月分のレコードだけ取り出す」っていうクエリーにチャレンジしてみましょうか。基本をつかんでいただければ、きっと応用が利くと思いますよ。

じゃあ・・・練習ってことで・・・こんな感じのクエリーを、新しく作成してみてください。クエリーを新規に作成するところの手順は、もう皆さんオッケーですよね?
「売上明細テーブル」と「社員テーブル」を使って、ふたつのテーブルは「社員番号」で結合します。結合は、今さっき覚えたばかりの操作ですけど、「社員テーブル主体の結合」にしてやりましょう。

で、前にやったみたいに[売上日]をモトに、Format関数を使って、xxxx年xx月の部分だけ取り出した状態のフィールドを作ります。
とりあえず 式1 の状態でよいですので、挑戦してみてください。半角全角、気をつけてくださいね。

で、他に[社員番号][名前][売上]を取ってきてください。[社員番号]はどちらのテーブルにも存在しますね。これをどっちから取ってくるか、とかいうのも、突き詰めていくといろいろあるんですが、今回は「売上明細テーブル」の方からでよいです。

ここまでは今までとおんなじですよね。で、その下・・・。
抽出条件欄に一工夫あるんです。

ほんとは、6月のデータだけ取ってきたかったら、[売上日]のフィールドの抽出条件欄に

Between 2000/06/01 and 2000/06/30

って書けばいいんです。これで、6月のレコードだけ取ってくることになります。
でも、これだと、毎月書き換えないといけないですよね。そうしなくちゃならないときもあるかもしれませんが、自動的に「今月の分」が出ればいいなぁなんてときもあるんじゃないかと思います。

そんなときに、Date関数を使うといいんじゃないかと思うんですよ。

さっきFormat関数を使って、[売上日]の年月の部分だけ取り出しましたよね。あれをもう一歩応用して、システム日付(Date関数が取ってくるパソコンが持ってる日付)から、年月の部分を取り出してやるんです。

format(date(),"yyyy/mm")

Date関数を使っているだけで、売上日から年月部分だけ取り出してるFormat関数と構造は同じですよね。え?ぜんぜんわかんないって??
もしかして、わかんないもんって思い込んじゃってません?関数なんて、構文は決まってるんですから、カッコとかダブルコーテーションとかカンマの位置に惑わされちゃダメなんですよ。これ丸写ししてたらぜったいワケがわかんないと思う。ここからコピーしたりしないで、ひとつひとつ入力しながら確認していってくださいね。関数なんて、慣れちゃいましょうよ。

と、たまたま今7月なんで・・・format(date(),"yyyy/mm")が返す答えは「2000/07」です。ですので、format([売上日],"yyyy/mm")が「2000/07」のデータだけ、抽出されるんですね。

あ、結合の条件を「社員テーブル主体」にしてますので、レコードの並び順がいまんとこ[社員番号]順になっちゃってますけど・・・。
まあ、これはなんかやりようがありますよね。このままでもいいのかな。
[売上日]順に並べ替えたければ、デザイン画面に戻って、[売上日]フィールドも選んでやればできますよね。