[Access 2016/2013/2010/2007]
本記事では、図1のような[T_日別売上]テーブルの[売上]フィールドの数値について、クエリで累計を求める方法を紹介します。また、後半では、レポートで累計を表示する方法も紹介します。クエリで累計を求める方法は、主キーフィールドのような、データが重複しないフィールドを基準に、レコードが並べられている場合に有効です。
手順ダイジェスト
累計: CCur(DSum("売上","T_日別売上","ID<=" & [ID]))
手順解説…DSum関数を使用してクエリで累計を求める
クエリで累計を求めるには、DSum関数(構文1)を利用します。DSum関数は、指定したテーブルのフィールドの合計を求める関数です。
構文1 指定したフィールドの合計を求める
DSum(フィールド, テーブル, 条件)
単に、
DSum("売上","T_日別売上")
とすると、[T_日別売上]テーブルの全レコードの[売上]フィールドが合計されます。累計を計算するためには、第3引数[条件]に「先頭のレコードから現在のレコードまで」という条件を指定しなければなりません。レコードが主キーフィールドである[ID]フィールド(数値型)の昇順に並べられているものとして、各レコードの計算の条件を整理してみましょう。
ID | 売上 | 累計 | 条件 |
---|---|---|---|
1 | 15,000 | 15,000 | ←[ID]が「1」以下のレコードの[売上]の合計 |
2 | 21,000 | 36,000 | ←[ID]が「2」以下のレコードの[売上]の合計 |
3 | 20,000 | 56,000 | ←[ID]が「3」以下のレコードの[売上]の合計 |
4 | 11,000 | 67,000 | ←[ID]が「4」以下のレコードの[売上]の合計 |
5 | 20,000 | 87,000 | ←[ID]が「5」以下のレコードの[売上]の合計 |
各レコードの関数式は下表のようになります。
ID | 売上 | 累計 | 関数式 |
---|---|---|---|
1 | 15,000 | 15,000 | ←DSum("売上","T_日別売上","ID<=1") |
2 | 21,000 | 36,000 | ←DSum("売上","T_日別売上","ID<=2") |
3 | 20,000 | 56,000 | ←DSum("売上","T_日別売上","ID<=3") |
4 | 11,000 | 67,000 | ←DSum("売上","T_日別売上","ID<=4") |
5 | 20,000 | 87,000 | ←DSum("売上","T_日別売上","ID<=5") |
実際にクエリを作るときには、上表の関数式を1つの共通の式にまとめる必要があります。「1」「2」「3」「4」「5」の部分は各レコードの[ID]フィールドの値なので、「[ID]」と表現できます。ただし、
× DSum("売上","T_日別売上","ID<=[ID]")
と書くのはNG。ダブルクォーテーション「"」と「"」の中に「[ID]」を入れてしまうと、「[ID]」が文字列と認識されてしまいます。「[ID]」をフィールドとして正しく機能させるには、「"ID<="」という文字列とフィールド「[ID]」を「&」演算子で連結します。
○ DSum("売上","T_日別売上","ID<=" & [ID])
この式をクエリの[フィールド]欄に入力して(図2)、実行すると累計が表示されます(図3)。
図3のクエリを見ると、累計が左揃えで表示されており、DSum関数の戻り値が文字列として扱われていることがわかります。変換関数を使用して、適切なデータ型に変換しましょう。ここでは通貨データとして表示したいので、CCur関数を使用して(構文2)、式1のようにDSum関数の戻り値を通貨型に変換します(図4)。
構文2 データを通貨型に変換する
CCur(データ)
式1 [T_日別売上]テーブルの[売上]フィールドの累計を通貨型に変換する
累計: CCur(DSum("売上","T_日別売上","ID<=" & [ID]))
メモ
ここでは数値型の[ID]フィールドの昇順に並べ替えたレコードの累計を求めましたが、日付/時刻型やテキスト型のフィールドを基準に並べ替えた場合は、条件のデータをそれぞれ「#」「'」で囲む必要があります。いずれのデータ型の場合も、並べ替えの基準のフィールドに同じデータが複数存在する場合、正しい累計を求められないので注意してください。
- 数値型:"フィールド名<=" & [フィールド名]
- 日付/時刻型:"フィールド名<=#" & [フィールド名] & "#"
- テキスト型:"フィールド名<='" & [フィールド名] & "'"
ヒント…[集計実行]プロパティを使用してレポートで累計を求める
レポートでは、テキストボックスの[集計実行]プロパティを使用することで簡単に累計を求めることができます。[集計実行]プロパティとは、テキストボックスに累計を表示するかどうかを指定するための設定項目です。既定値は[しない]で、その場合、フィールドの値がそのままテキストボックスに表示されます。[集計実行]プロパティの値を[全体]に変更すると、全レコードを通した累計がテキストボックスに表示されます。なお、[集計実行]プロパティは、レポートのテキストボックス特有のプロパティで、フォームのテキストボックスにはありません。
ここでは、オートレポートで作成した表形式レイアウトのレポートを例に、累計を表示する方法を紹介します。レポートを作成するところから手順を解説しますが、既存のレポートに手動でテキストボックスを配置して累計を表示したい場合は、図5~図7を飛ばしてください。
まず、[T_日別売上]テーブルをもとにオートレポート機能でレポートを作成します(図5)。
オートレポート機能でレポートを作成すると、「表形式レイアウト」と呼ばれるレポートが作成され、そのレイアウトビューが表示されます。ここに、累計の対象になるフィールドを追加してください(図6)。「表形式レイアウト」では、フィールドを追加すると自動で整列するので、簡単にレイアウトできます。
[売上]列が2つ並ぶので、新しく追加した方の列見出しを「売上」から「累計」に修正します(図7)。
以上で準備が整いました。ここからが、累計設定の本番です。ポイントは、テキストボックスの[コントロールソース]プロパティで累計対象のデータを選び、[集計実行]プロパティで[全体]を選ぶことです。図5~図7のように操作した場合は、[コントロールソース]プロパティには累計対象のフィールドが設定されているはずなので、[集計実行]プロパティのみを設定しましょう(図8)。自分で手動で新しいテキストボックスを配置した場合は、[コントロールソース]プロパティと[集計実行]プロパティの両方を設定してください。
メモ
[集計実行]プロパティは、レポートに配置したテキストボックス特有の設定項目です。設定値は[しない][グループ全体][全体]の3つです。
- しない:累計を計算しない(既定値)
- グループ全体:グループ化されたレポートで、グループごとに連番を振り直す
- 全体:レポートの全レコードを通した累計が求められる