「Excel」は表計算ソフトだが、「Access」の使い方を知らないユーザーがデータシートとして利用することも多い。Excelをデータベースとして利用するつもりなら、データをデータベースのやり方で保存する必要がある。空白のセルが数多くあるExcelシートは、柔軟性を考慮した構成ではないことをうかがわせる。この記事では、空白だらけの、つまりは問題だらけのデータセットを修整してみよう。
筆者は64ビット版の「Windows 10」で「Office 2016」を使用しているが、この記事は、それ以前のバージョンにも応用できる。自分のデータで作業してもいいし、「.xls」または「.xlsx」形式のデモファイルをダウンロードしてもいい。
問題点
図Aのシートは、問題などまったくなさそうにしか見えないデータのいい例だ。教師はこのシートを使って、生徒に与える学習賞を追跡している。残念ながら、この構成では各賞の受賞者が5人までに限られる。教師が6人目に賞を与えようとすれば、新しい列が必要になる。また、受賞者がいない賞もあり、空白が数多くある(筆者は、Tableオブジェクトで作業しているが、代わりにRangeオブジェクトを使用してもいい)。
構成を考える際に、問題点を示す手がかりが2つある。
- 数多くの空白セル
- 既存データに対応する列の追加
例に挙げたデータセットの場合、利用するのがExcelかAccessかに関係なく、各賞がそれ自体ひとつのレコードであるべきだ。

図A:このシートでは、各賞の受賞者が5人までに限られる。
ピボットテーブル機能を利用した場合に、この構成のままでどの程度うまくいくか見てみよう。
- データセット内のどこかをクリックする。(「ホーム」タブの)「挿入」、「テーブル」グループの「ピボットテーブル」の順にクリックする。現れたダイアログは、初期設定のままだ(図B)。古いメニュー形式のバージョンを使用している場合は、「データ」メニューの中に「ピボットテーブル」がある。
- 初期設定を変更する必要はないので、「OK」をクリックする。
- フレームが現れるので、「Award」(賞)フィールドを「行」ボックスにドラッグする(図C)。これまでのところは、まあまあいい感じだ。
- 今度は、「Recipient 1」(受賞者1)フィールドを「列」ボックスにドラッグしてみよう。これは、うまくいかない。すべての受賞者フィールドを追加しても役に立たない(図D)。
- 受賞者フィールドを「値」ボックスに移しても、大してよくならない(図E)。

図B:Excelは、設定を上手に予測してくれる。

図C:「Award」フィールドを「行」ボックスにドラッグした場合は、問題なく表示される。

図D:明らかに、何かがおかしい。

図E:フィールドのドラッグ先がどこであろうと、意味をなさない結果になっている。