■ 営業担当者別受注額をピボットテーブルに表示する (2002,2003,2007)

図 営業担当者別受注額をピボットテーブルに表示
営業担当者別の受注額を四半期別にピボットテーブルに表示します。さらに、ピボットテーブルの県名を展開/折りたたむ手順についても解説します。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkにW114.mdbを作成します。
2. テーブル、クエリをインポート
Windowsのエクスプローラから、114.mdb(このページの最後からダウンロードできます)をダブルクリックして開きます。データベースウィンドウのオブジェクトから[テーブル]をクリックしたら、社員テーブル(tblEmployees)をドラッグしてW114.mdbのデータベースウィンドウにドロップします。同様の手順で、受注テーブル(tblOrders)と受注明細テーブル(tblOrderDetails)をドラッグ&ドロップします。さらに[クエリ]から営業担当者別受注クエリ(qry2002OrdersByEmployeePT1)をドラッグ&ドロップします。テーブル、クエリをインポートしたら114.mdbを閉じます。
3. フォームにピボットテーブル作成
データベースウィンドウのオブジェクトから[フォーム]を選択したら、[新規作成]ボタンをクリックします。「新しいフォーム」のダイアログが表示されたら、リストボックスから[オートフォーム:ピボットテーブル]を選択します。基になるテーブルまたはクエリの選択から[qry2002OrdersByEmployeePT1]を選択します。[OK]ボタンをクリックしてダイアログを閉じます。
ピボットテーブルのウィザードが起動されたら、「ピボットテーブルフィールドリスト」から[四半期]をドラッグして「ここに列のフィールドを・・・」にドロップします。[営業担当]をドラッグしたら「ここに行のフィールドを・・・」にドロップします。以下、同様の手順で[県]を「ここにフィルタを設定するフィールドを・・・」にドラッグ&ドロップ、[受注額]を「ここに詳細のフィールドを・・・」にドラッグ&ドロップします。

図 フィールドリストからフィールドをドラッグして対応するボックスにドロップする
営業担当者別の四半期別受注額がピボットテーブルに表示されます。

図 営業担当者別の四半期別受注額がピボットテーブルに表示される
4. 県名を表示
営業担当者別の四半期別受注額が表示されたら、[県]をドラッグして[営業担当]の右側にドロップします。

図 [県]をドラッグしたら[営業担当]の右側にドロップする
ピボットテーブルに県別受注額の内訳が表示されます。ピボットテーブルの[営業担当]をクリックして選択したら、ツールバーから折りたたみのアイコン
をクリックして県名を隠します。ツールバーから展開のアイコン
をクリックすると、県名が表示されます。

図 ピボットテーブルに受注額の県別内訳を表示
5. フォームを保存して閉じる
ツールバーから上書き保存のアイコン
をクリックしたら、「frm2002OrderByEmployeePT1」の名称で保存します。
●解説
ここでは、社員テーブル、受注テーブル、受注明細テーブルから営業担当者別の四半期別の受注額を集計するのに2個のクエリを使用しています。qryOrderSubtotalsのクエリは、受注テーブルと受注明細テーブルを結合して受注ID別の受注額を集計します。
qryOrderSubtotals:
SELECT tblOrders.OrderID, Sum(CCur([UnitPrice]*[Quantity])) AS Subtotal
FROM tblOrders
INNER JOIN tblOrderDetails ON tblOrders.OrderID = tblOrderDetails.OrderID
GROUP BY tblOrders.OrderID;
qry2002OrdersByEmployeePT1のクエリは、社員テーブル、受注テーブル、qryOrderSubtotalsを結合して、四半期別の受注額を集計します。このクエリの抽出条件には、「OrderDate Between #1/1/2002# And #12/31/2002#」を設定して、2002年度の受注データを抽出するようにしています。
SELECTステートメントの列に「EmployeeName AS 営業担当」のように別名を追加していますが、これはピボットテーブルのフィールドリストに日本語を表示するためです。
qry2002OrdersByEmployeePT1:
SELECT EmployeeName AS 営業担当,
ShipKen AS 県,
Format([OrderDate],"q") AS 四半期,
qryOrderSubtotals.Subtotal AS 受注額
FROM tblEmployees
INNER JOIN (tblOrders INNER JOIN qryOrderSubtotals
ON tblOrders.OrderID=qryOrderSubtotals.OrderID)
ON tblEmployees.EmployeeID=tblOrders.EmployeeID
WHERE (((tblOrders.OrderDate) Between #1/1/2002# And #12/31/2002#));