| <HOME <お願い事項 <Access2002 TOP <Access2000 TOP <サイト内検索 | ||
| Access97 VBAの森>縦のものを横に | ||
(4)
仕上げはこれ。変数の中に取った答えを、「売上集計」テーブルに代入していきます。
d2.AddNew
d2![1月] = m1
d2![2月] = m2
d2![3月] = m3
d2![4月] = m4
d2![5月] = m5
d2![6月] = m6
d2![7月] = m7
d2![8月] = m8
d2![9月] = m9
d2![10月] = m10
d2![11月] = m11
d2![12月] = m12
d2.Update
これでオッケー。
全部書けました?んじゃあ、コンパイルして、デバッグウィンドウを使ってテスト走行してみましょう。
・・・相変わらず味気ないですけど、なにも起こらず、カーソルが次の次の行でぴかぴかしてるってことは、ちゃんと処理が終わったってことじゃないかなと思います。
いつまでも次の行でカーソルがとまったままだと、おそらく永久ループです。
Do Loopの処理の書き方が、どっか悪くて、いつまでたっても処理を抜けないってことです。
Breakキーを押してプロシージャを止めないと、たいへんなことになりますぞ。
終わったら、保存してプロシージャのウィンドウをいったん閉じ、売上集計テーブルを見てみましょう。どうでしょう。できてます?
これが、縦のものを横にするプログラムの基本型ですね。けっこうタイヘンですよねぇ・・。
んじゃ、テーブルはいったん閉じましょう。
今度は売上テーブルの方を見ましょうか。
さて、日がだいぶ経って、売上テーブルの中の伝票が少し増えたとします。
入力し忘れていた伝票が後から出て来て、5月の売上を追加入力したり、いろいろありました。
売上集計はどうなってるかな・・・。下の方に開いてみました。
でも、売上テーブルのデータが変ったからといって、売上集計テーブルの中身は変らないですよね。
売上集計はクエリーじゃないんで、売上テーブルとは何の関連付けもないですから・・・。
↑このテーブルの中身が変ったからといって、↓集計テーブルに即反映されるわけじゃなし!こっちは変らず。
え、なんで?どういう意味????んー、これの意味がわからないと、先行きちょっと厳しいですぞ・・・。
でも、ややこしいお話ではあるんで、整頓して考えてみてくださいね。
そうそう。売上集計テーブルに集計データが入っているのは、さっき作ったプロシージャを実行したから、ですよね。
じゃ、もう一回あのプロシージャを実行すれば、下の売上集計テーブルの方に新しい集計結果が入ってくるはずです。
よしよし、じゃ、またデバッグウィンドウを使って、プロシージャを実行してみましょう。
まだフォームとか用意してないんで、プロシージャの実行はとりあえずデバッグウィンドウからってことで。
まあ練習ですから・・・ついでにこの操作も慣れちゃってくださいね。
あれれ?
あ、そっか・・・。AddNewしてるんだから、2回目に実行したときは、2レコード目に書き込まれることになるのか・・・。
まあ、前の集計データを残していきたいときはこの方がいいですよね。うーんでも、どうかなぁ。今回は・・・。
どうしましょう。これで、プロシージャを15回実行したら、15レコードできることになるんですよね。
でも、必要なデータは常に一番最後の1レコードだけ・・・。
このプロシージャ実行する前に、売上集計テーブルの中のレコード、削除するようにしましょうか。
そういう処理が今後必要になることもあるかもしれないですよね。やってみますか。
これはいわゆる「削除クエリー」というやつと同じ処理を作ります。
でも、「売上集計テーブルの中のレコード全部削除したい」って言っても、中々カンタンにはやってくんないんですよ。
Loopの処理のイメージはご記憶ですか?あれと同じ仕組みを作ります。
Do Until d2.EOF
d2.Delete
d2.MoveNext
Loop
これもMoveNextを忘れないように。
この処理を、プロシージャの先頭部分で実行しておきます。そうですねぇ・・・。
Set文の後か、m12=0の後か・・・その辺がいいんじゃないでしょうか。
で、この後、集計するループ文が動いて足し算すれば、常に「売上集計」テーブルの中身は必要な1レコードのみ、ってことになりますよね。
こういう処理は、削除クエリーを作っておいて、このプロシージャの前にでも実行しておいてもいいですよね。
ほんとに、クエリーとVBAはうまく使い分けて効率アップを図っていってください。
さて、改めてプロシージャ実行・・・。
と、今度は1行だけ、最新の集計レコードがテーブルの中に書き込まれた形になると思います。
| |