<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--無理やりシマシマフォームを作る
  1 2 3 4



VBAの小屋の方で、「シマシマレポート」というヤツを作ってみてるんですけども、これの「表形式のフォーム版」ができないものか、ということを考えてみようと思います。

正直言ってできません無理。

以上!

・・・マジで、できないんですよ。無理なんです。難しいとかそういう問題じゃなくて、できないことなんです。
じゃあどうすればいいのかって?表形式のフォームをシマシマにしようなんて思わないことです。

ここでは、なぜできないのか、という根本の部分を理解して、その上で、無理やりシマシマフォームを作ってみようという試みに挑戦しようと思います。

あくまでも「無理やり」です。なので、試行錯誤して苦しい作りこみをせざるを得ません。
そうなると逆にいろいろなやり方が考えられるかもしれませんが、どれもはっきり言って「こんなことをやるくらいならあきらめた方がマシだ」と、誰もが思うような展開になります。それを十分踏まえた上で、どれくらいばかばかしいか、やってみようではありませんか。ねえ。
今日は、いろいろ考えられるうちのひとつを実際にやってみようと思います。

でも、ほんとに無理やりなんで、がっかりしないでくださいよ。


なんでできないのかってとこなんですけど・・・これは、みなさん把握してらっしゃいますか???
他のコーナーと話題がダブってしまうかもしれませんが・・・。
シマシマはあきらめるとしても、とりあえずその辺の仕組みというか、考え方について、理解を深めておきましょう。

Accessに限ったことではないんですけれど、データベースと名のつくものは、大勢でデータを共有しようとします。「共有」という言葉自体いろんな解釈があるのですけれど、とにかく、「みんなでデータ入力して、みんなでそれぞれ必要なデータだけ取り出す」という雰囲気を作るべく活躍するのが、データベースなのです。なので、データはしょっちゅう増えたり減ったりするし、数字が書き換わったり・・・してもしなくも、そういう状況下でも出したい情報をぽこっと出せるような構造を、Accessの各オブジェクトは備え持ってるわけなんです。

データがたまるのはテーブル。その他のオブジェクトは、テーブルの中のデータを引っぱりだしたり、テーブルにデータを入力したりするためのお手伝いっぽい存在になります。フォームやレポートは、テーブルの中のデータを出すための「枠」に過ぎません。

フォームのデザイン画面を思い出してみてください。

表形式のフォームの場合、「1件分のデザイン」をしますよね。どのテキストボックスにどのフィールドの値を表示させたいのか、という指定をしてやります。
表の色、といったら、おそらく、「詳細セクションの背景色」のことになると思うんですが。。。
あるいは、テキストボックスの背景色になるかもしれないですね。

で、フォームビューで開いたとき、そのときにテーブルの中に入ってるデータを、その件数分繰り返して表示する、という仕組みになってます。
全部おんなじ色になるはずです。あたりまえですよね。1行分しかデザインしてないんだし。

表計算ソフトの「セル」という考え方とはぜんぜん違うんですね。表計算ソフトはマスメの「場所」でデータを捉えて考えますが、データベースはあくまでも基になるテーブルの中のレコードを主体に考えます。なので、このフォーム自体はデータを持ってないし、「このフォームの3行目の2列目の値」なんていう考え方はしません。フォームには1件分の「デザイン」しか存在してないのです。

だからこそ、扱いが簡単になる一面もあるのですよ。Accessはデータベースです。データを貯めたり取り出したりすることがメインのお仕事で、罫線引いたり文字の色を変えたりすることを最優先するような考え方は持ってませんもんね。ここんとこをきちんと把握できれば、Accessでできること、難しいこと、むしろ表計算ソフトを用いた方が効率がよさそうなこと・・・判断がしやすくなるってもんなんですよ。

データベースというもんでは、テーブルの中からデータを取り出したり、テーブルの中にデータを納めたりすることを主として考えます。これはみなさんよろしいですよね?なので、処理の単位は「レコード」。このレコードを、処理の内容にあわせてすばやく並べ替えたり、「すみれ組の人だけ」取り出したりできるような体制が整ってるのです。なので、レコードはつながってません。テーブルを開けば、主キーとなっているレコードに従って何となくずらずらっと並んで表の形で出てきますけど、別にレコードがつながってひとつの大きな表になっているわけではないのです。なので、「4行め」がジミー・ペイジのデータなのは、あくまでもジミーペイジの社員番号が0004で、社員番号が主キーになっていて、特に他の並び順が指定されてないから、4番目に見えているだけ。このテーブルの4番目にジミーペイジのデータが入っているわけではないのです。もし、Accessの操作方法だけではなく、データベースそのものを理解していきたい・・・と思ったら、まずはこういったところから把握していく必要があるでしょう。

表計算ソフトももちろんとっても便利です。でも、データベースではありません。
どこが違うか、といったら、まず上げられるのが、上のような点ではないかな、と思います。
データベースはレコード単位で情報を処理しますが、表計算ソフトはあくまで「ファイル単位」。小さく切ったメモ用紙をたくさん持ち歩いて必要なときに1枚めくってこまめにメモを取るか、おおーきな模造紙を抱えて必要なときにびろーんと広げてメモをとるか、そんな感じですね。MS-Excelはどれだけデータベースっぽく振舞ったところで、1枚の大きな模造紙を広げて使ってるようなもんですから、線を引こうが1行ずつ色を変えようが、手間さえ惜しまなければ自由にできます。小さなメモ用紙を1枚ずつ使ってる場合は、1枚1枚独立してますから、全部のメモ用紙に対して同じ色や同じ文字の大きさを使おうと思ってもなかなか難しい。しかも、1枚おきに色を変えようとか言い出したら、面倒でメモを取ることそのものに集中できなくなりそうです。
メモを取ることに専念し大量の情報を処理しようと思ったらデータベース、縦横に線を引いて見易さ重視で行くなら表計算ソフト・・・そんな感じで捉えるべきだと思いますが、どうしても「見栄え」の部分にとらわれがちになってしまいますからね・・・。


ただし、レポートの場合は、ほんの少し工夫することができます。

デザイン自体は、「1行分のデザインを、レコード件数分繰り返す」ということでフォームとおなじなんですけど、詳細セクションのイベントに「印刷時」とか「フォーマット時」っていうのがあります。これは、セクションを印刷するごとに、毎行なんかしら処理を実行できるっていうイベントになります。

このイベントで、何とかして、偶数行か奇数行か判断するなどしていけば、行ごとに背景色を変えることが可能になります。
その辺をお話しているのが、「VBAの小屋」の中の「シマシマレポート」なのです。
あくまでも「その行を印刷するときに判断させるプロシージャを動かして色を変える」やりかたです。
ほんとうに1レコードずつ色の設定を変えている・・・というわけでは、ないのです。

では、フォームには「詳細セクションのフォーマット時」といったイベントは・・・ないんですよ。だから、どうしようもないんです。

レポートでできて、なんでフォームではできないのか・・・。
これも、Windowっていう環境で簡単に手軽に開発ができるようなしくみがあるから、だと、わたしは考えてます。
つまりですね・・・。例えば、スクロールバーを動かしたときとか、ウィンドウのサイズを小さくしたり大きくしたりとか、いろんな「動き」が考えられるじゃないですか。最初に言ったとおり、フォームもレポートも「枠」でしかない。4番目にジミー・ペイジのデータが来るなんてコトは、フォーム上では予測できないしわからないのです。
レポートは「紙」に印刷しますよね。プレビューも、実際には表示は固定され、スクロールバーが動いても、用紙のどのヘンにどの文字が印字されるかってことは、変わらないですよね。
つまり、「詳細セクション」で1行ずつ、「これは赤、これは青・・・」と判断させてイベントを実行させ背景色を変えて、1行ずつ印刷されていくわけです。印刷した後で「フォーマット時」とか「印刷時」のイベントが再度動いちゃうなんて心配は、必要ないのです。紙なんですから。

でも、フォームの場合は・・・わたしたちは自由にフォームを動かすことができます。さらに、絞り込んで「さくら組の人だけ」とかの表示にもできたりします。こういうときに、条件によって背景色を変えたりするようなイベントって、対応ができないんだと思うんです。紙に印刷するのとわけが違う。いろんなタイミングで「フォーマット時のイベント」が動いてしまいます。

多分・・・こういう機能をフォームに付加しようとしたら、ところどころデータの表示が空白になっちゃったり、フォームの表示に異常に時間がかかったり・・・本来の「データを取り出し、データを入力する」という一番大切な部分がおろそかになってしまうんじゃないのかなぁって、ちょっと心配です。幸い、Accessは世の中に登場以来、パソコンソフトにはめずらしく「データベースの本質」を守りつづけています。だからこそわかりにくいだの難しいだの言われてるのかもしれませんが、本当の意味での「データベース」としての仕事に専念しているからこそ、なんですよ。。。いちいちExcelと比較して考えちゃうのは・・・・・・こういう比較はマイナスですよ。ホント。