エクセルで関数を使っていた段階からVBAを使えるようになると、一つの上達の壁を乗り越えた実感を持てます。
プログラムを作成するようになったら、さらにSQLを学んでみることを私はおすすめします。
大量のデータであればVBAよりも断然向いていて、何より、SQLを知ると集合指向言語を知ることができるからです。
この記事では集合の掛け算によりデータの組み合わせを作成してみます。
ちなみに、集合の引き算でデータの突き合わせを行うこともできます。
詳しくは下記の記事をご参照ください。
また、この記事ではMicrosoft Accessを使っています。
Excelのような小回りの利く使い勝手の良さが良いのですが、より本格的にSQLを追求するなら、MySQL, PostgreSQL, Microsoft SQL serverなどを使用するのが良いでしょう。
SQLは集合指向
SQLは集合指向言語です。一般的によく聞くプログラム言語のほとんどは手続型言語と言います。
特徴的な違いはループの有無だと思います。
手続型言語は「データを1件取り出す ~ 処理 ~ データの最後までループ」という流れでプログラムを作るため、データ数が100倍、1000倍、と増加するにつれレスポンスが悪くなります。
その点SQLはレスポンスはそれほど変わりません。ループせずにデータを扱うからです。
DB関連で私が座右の書としているミック氏の書籍では、手続型言語を「ぐるぐる系」、集合指向言語を「ガツン系」と呼んでいました。SQLはガツンと一発で結果が出ます。
集合の掛け算
ある製品があったとして、そのバリエーションが、縦5サイズ、横4サイズ、高さ3サイズ、色2種類、性能3段階だったとします。
種類が増えるにつれバリエーションは掛け算式に増えます。
この全体像データを作るとき、エクセルVBAが使える人ならループで掛け合わせるマクロを組むでしょう。そしてそれは何行くらいのコードになるでしょうか。
データ
下記のような3つのテーブルを用意します。



これらを掛け合わせるとしたら10件×10件×20件=2000件のデータになります。
・うま味のある おいしさの 鮭
・酸っぱい うまみの 鰻
・苦味のある 辛味の 唐揚げ
などなど。
VBAで掛け合わせをするなら、何行くらいのコードになるでしょうか。
SQLなら2行です。
SELECT *
FROM 1_形容, 2_味, 3_食べ物;
少ないコードで開発すれば費用対効果は大きく、バグの入り込む余地はより少ない。
しかもレスポンスは高速す。
また、AccessならOfficeとも親和性が高く、データをエクスポートもできます。

タイトル+データ2000件=2001 行のデータになっています。

まとめ
- 集合指向言語であるSQLは、ぐるぐるループをする言語と違ってデータ数によるレスポンスへの影響が少ない
- 手続型言語に比べ少ない行数で実現でき、費用対効果は大きくバグの入り込む余地は少なくできる
DBさえしっかりでき上っていれば、あとは条件指定画面と結果表示画面さえ作ったらちょっとしたシステムがほぼ出来上がり、なんてことも往々にしてあります。
ただしSQLの難点は取っつきにくさです。
普通は手続型言語のプログラミングから入ることがほとんどなので、そこからの発想の転換がとても大変です。
しかし転換点を実感した時、大きな山を越えたような感覚を感じることができることでしょう。
ここが、私がSQLの学習を勧める最大の理由です。
データベースは集合指向ということを知り、考えの転換点になったきっかけはこちらの書籍でした。
集合の引き算を使うことで、データの突き合わせを行うこともできます。
詳しくは下記の記事をご参照ください。
コメント