<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000--VBAの小屋>横のものを縦にする
   1 2 3



どうでしょう。VBAでのテーブルの扱い、雰囲気つかんでいただけました?
結局・・・特殊な場合を除いて、そんなにVBAを用いたプロシージャをわざわざ作る必要って、ないんですよ。
っていうか、MS-Accessを使うならまず、マクロとアクションクエリの組み合わせで、うまいこと実現できないものか、考えるべきなのです。それは決して「Accessの技術が低いからVBAが使えないから」というわけではないのだ、ということ、おわかりいただけたんじゃないかなって思います。

むしろ、Accessを使うのであれば、極力VBAでコードを書くことを避け、きちんとしたテーブル設計をマクロやクエリといったオブジェクトで端的な処理を作ることを心がけていくべきなのです。そうすることで、コンピュータ内部的にもデータベース的にも、合理的なデータベースにしあがるはずなんですよ。
いっとうさいしょに「VBAで」やろうとすること自体、ともすると非合理的な設計に陥りがちになっちゃうんです。

そのソフトウェア、そのデータベース機構によって、データの持ち方や考え方って異なります。
AccessにはAccessのデータの持ち方、テーブルやクエリのあり方っていうのがありますもんね。


ある程度仕組みを作ってしまってから、「このテーブルの形では社員ごとの集計が取れないじゃないか」とか、どんづまりに突き当たってしまう可能性もあります。
あるいは、別のデータベースや、表計算ソフトなど仕組みの異なるソフトウェアからデータだけ移行してきたときとか・・・。

たとえば・・・。うーん、そうですね。

横のものを縦にする、なんてこと、やらなくちゃならないときってたまにありますね。

こうなっちゃうと結構苦しいんで、根本的にこうならないような運用/設計を心がけないといつまでたっても手離れしないシステムになっちゃいますけど・・・急に上司に「Excelからデータ持ってきて一覧表にして」なんて言われることも、あるかもしれない・・・。



例えば、ですけど、Ms-Excelで、こんな感じの表を作ってたとします。
毎日みんなで山にマツタケを取りに行くんですけど、何本取れたか表にしてるんです。
え?どこで取れるのかって?そんなのひみつですよひみつ。1年中取れるのかって?それもひみつです。

Excelみたいな表計算ソフトだと、ウィンドウを2分割してスクロールしたりもできるし、横にどんどん列を追加して入力していくこともできますよね。
メンバーが増えたら、8行目に1行追加して入力していけばいいし。
でも・・・Excelって、横に256列までです。ええと、8月1日から記録をつけはじめて、1ヶ月30日として、8ヶ月と半、くらいでしょうか。1つのシートに1年分書き込むことはできなさそうな感じですね。

じゃあ、ということで、Accessに持ってってAccessで処理したらどうよ、なんて、適当なことを言い出す人がいました。
とりあえずインポートしてみましたが・・・。

こんなテーブルになりました。↑ええと、132フィールドあるテーブルになったです。
んじゃ、12/1の結果を入力しなくちゃ・・・。

右端を見たけど、あれ、11/30までしか欄がないぞ???

そ、そうか・・・12/1の分のフィールドを作らなくちゃ・・・。テーブルのデザインを見て・・・。

これでいいのかな。テーブルを保存して・・・。

おお、12/1分の欄ができた。

じゃあ、各メンバーの「今まで取ったマツタケの数」を集計したいと思ったら、クエリを作って、
そのクエリにテーブル内の全フィールド選んで、

合計:[2000/08/01]+[2000/08/02]+[2000/08/03]+[2000/08/04]+[2000/08/05]..........

と、式を作って、全フィールド足し算します。



こんなの毎日やってられるかー!!!!(ちゃぶ台返し)

Accessにだって、フィールド数の限界はあります。255までです。つまり、状況としてはExcelと同じで、これこのまま移行してきたって、ぜんぜん意味ないわけです。
ExcelよりAccessの方が高度なことができる、と思い込んでいる人がたまにあるようなんですけど、振り回されちゃダメですよ。
確かに、Excelは表計算ソフトでAccessはデータベースですので、データを大量に処理する、という面では、Accessの方が格段に能力が上です。
でもね、Excelと同じような使い方をしていたら、使いにくいだけです。

本来、Accessでこういう感じのデータをためていくなら、↓こんな感じのテーブルを作るべきです。

今の、横にながーいテーブル↓と比較すると、赤い印で囲ったところが、同じ意味合いのデータ群ということになります。
ふたつのテーブル、見比べてみてください。



前者のテーブルなら、ある程度データ入力したあと、「毎日、だれがいくつくらい取ってきたのか、集計してみたいなぁ」と思ったら、「クロス集計クエリ」という方法で集計を取ることが可能です。

単に「各メンバーが今までにいくつ取ってきたのか、集計したい」というなら、「集計クエリ」というやつで簡単に値をゲットできます。

あらっ。いのっちどんじりだ。がんばれ!いのっち!


前置きが長くなっちゃいましたが、こうなってしまったら、Accessで扱うのが難しくなっちゃいますので・・・こういうとき、インポートしてきた横に長いテーブルを、縦に伸びる形のテーブルに作り変えるプロシージャを作って動かすことがよくあります。
もし、「ちょっとこのテーブルでは処理が難しいかも・・・」と思ったとき、やむを得ず生み出すプロシージャだと思って、挑戦してみてください。

こういうテーブルを元に、

こういうテーブルを作る処理です。