データベース型の表を作る

メニューへもどる


データベース型とは

 データを格納するための表で、「見るため」でも「印刷するため」のものでもありません。ここから必要に応じてデータをコピーしてきて、別の表にまとめて使うためのものです。従って、無駄な罫線など引きませんし、文字の大きさなど不要な書式の設定はしません。1行目は必ず「項目行」とし、1件のデータは1行に並べます。見るため・印刷するための表は、これとは別に作ります。こうすることで、同じデータを元にして様々に形を変えて利用できます。データを分けることによって、印刷用の表も作りやすくなります。

印刷フォーム

データを見やすく並べたり、ある形式に印刷するための表をフォームといいます。エクセルで表を作るとき、多くの人は、このフォームから作り始めますが、この表は1件のデータしか入りません。また、印刷するものしか入れられないので、必要なデータを計算するための式も複雑になってしまいます。これをコピー・貼り付けして再利用する場合も、変更が多くせっかく作ったフォームを壊してしまうことにもなります。 データベースの表と印刷フォームの表を分けることによって、再利用の簡単な表が作れるのです。
 売り上げ台帳というデータベースには、仕入れ原価なども入っていますが、これをデータのベースとして納品書も請求書も作れます。住所録には、家族構成や勤務先などのデータも入れておけますが、これを元に作る葉書宛名印刷には、必要なものだけ持ってこられます。

★住所録と葉書宛名印刷の例

データベースを印刷フォームにコピー・貼り付けするときに、直接その位置には貼り付けません。必ず、受け渡し場所を作って、ここから式で読み込みます。

左は、住所録の例です。
住所は、後で何行かに分けて使うことを考え、適当な場所で切っておきます。切っておいたものを繋げることはできても、適当な位置で分けるということは、コンピューターには無理だからです。
 左は、縦書き宛名印刷のフォームです。
これは、住所録とは別のシートに作ります。ここでは、見栄えのするように、文字の大きさやフォントなどを指定して、配置も「上詰め」「下詰め」など指定します。

 問題は、これを住所録からどうコピー・貼り付けするかです。一つずつコピーして貼り付けるのでは面倒です。

 実は、G1やF1のセルには式が入っているだけで、実際にはフォームの中には貼り付けていません。

 住所録から必要な1行をコピーし、宛名印刷フォームの欄外(印刷範囲外)のA6から貼り付けます。そして、フォーム中の住所の1行目が入る場所(G1)には、=D6 という式を入れておきます。同様に、F1・E1・D1にも、6行目のどの位置を持ってくるか考えて、=座標 という式を入れます。(差出人欄は固定なので、文字を直接入れますが)
こうすると、A6に別の1行を貼り付ければ、別の宛名印刷が可能になります。
 A6の行は、データの受け渡し場所に使っています。この場所は、別のシートでも構いません。

宛名印刷には番号は不要ですが、これを抜いてコピーするのは面倒なので、構わず1行コピーしてしまいます。受け渡し場所には不要なものがあっても構わないのです。
宛名印刷は、一つの例です。データベースを作って、印刷フォームに代入する、という方法は様々なものに応用できるはずです。「見るための表」と「データを格納するための表」を別に作る、ということをマスターしてください。

コピー・貼り付けを自動化する

 オートマクロを使えば、コピー・貼り付けの作業をマクロ化することもできます。印刷したら次の行へ進むようにすれば、マクロを実行しながら次々にコピーできます。その方法が、「宛名印刷」に紹介してあります。

関数を使って、データを選択するには

vlookupという関数を使えば、データベースから検索できます。しかし、検索が有効になるためには、データがソートされている(順番通り並んでいる)こと、検索の範囲を指定することなどの条件が必要です。きっちりしたデータベースになっていないとvlookupが機能しないこともあります。
ここでは、index関数を使う方法を紹介します。

=index(範囲,行番号,列番号)で、指定した範囲の中の何行・何列を数字で指定すれば、セルの値が求められます。ここでは、範囲はaddressというシート全体という意味で、範囲を
address!1:65536 と指定します。

H6に欲しいデータの番号を入れます。実際の行は、これより1行下なので、行番号は H6+1 です。
その行の2列目に名前があるので、L1の場所では列番号に2を指定します。

 以下同様に、O1・N1・M1にもindex関数を入れます。H6に番号を入れると、宛名が変わります。関数を使う方が、マクロの警告がでないので安心感はあります。

行番号を入れるのでなく、名前などを入れて検索するには、Vlookup関数を使います。この場合は名前の列が左端(A列)にあること・データベースが名前順にソートされていることが必要です。

サンプルファイルのダウンロード35KB  このファイルはマクロと関数との両方が含まれています。


メニューへもどる