累計を計算するには

[Access 2016/2013/2010/2007]

本記事では、図1のような[T_日別売上]テーブルの[売上]フィールドの数値について、クエリで累計を求める方法を紹介します。また、後半では、レポートで累計を表示する方法も紹介します。クエリで累計を求める方法は、主キーフィールドのような、データが重複しないフィールドを基準に、レコードが並べられている場合に有効です。

図1 [売上]フィールドの数値の累計を求めたい。

スポンサーリンク

手順ダイジェスト

累計: 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)。

図2 クエリの[フィールド]欄にDSum関数を入力する。

図3 累計を表示できた。

図3のクエリを見ると、累計が左揃えで表示されており、DSum関数の戻り値が文字列として扱われていることがわかります。変換関数を使用して、適切なデータ型に変換しましょう。ここでは通貨データとして表示したいので、CCur関数を使用して(構文2)、式1のようにDSum関数の戻り値を通貨型に変換します(図4)。

構文2 データを通貨型に変換する
CCur(データ)

式1 [T_日別売上]テーブルの[売上]フィールドの累計を通貨型に変換する
累計: CCur(DSum("売上","T_日別売上","ID<=" & [ID]))

図4 [累計]フィールドに式1を設定すると、累計値が通貨の表示になる。

メモ

日付順や文字列順の累計を求めるには

ここでは数値型の[ID]フィールドの昇順に並べ替えたレコードの累計を求めましたが、日付/時刻型やテキスト型のフィールドを基準に並べ替えた場合は、条件のデータをそれぞれ「#」「'」で囲む必要があります。いずれのデータ型の場合も、並べ替えの基準のフィールドに同じデータが複数存在する場合、正しい累計を求められないので注意してください。

  • 数値型:"フィールド名<=" & [フィールド名]
  • 日付/時刻型:"フィールド名<=#" & [フィールド名] & "#"
  • テキスト型:"フィールド名<='" & [フィールド名] & "'"

ヒント…[集計実行]プロパティを使用してレポートで累計を求める

レポートでは、テキストボックスの[集計実行]プロパティを使用することで簡単に累計を求めることができます。[集計実行]プロパティとは、テキストボックスに累計を表示するかどうかを指定するための設定項目です。既定値は[しない]で、その場合、フィールドの値がそのままテキストボックスに表示されます。[集計実行]プロパティの値を[全体]に変更すると、全レコードを通した累計がテキストボックスに表示されます。なお、[集計実行]プロパティは、レポートのテキストボックス特有のプロパティで、フォームのテキストボックスにはありません。

ここでは、オートレポートで作成した表形式レイアウトのレポートを例に、累計を表示する方法を紹介します。レポートを作成するところから手順を解説しますが、既存のレポートに手動でテキストボックスを配置して累計を表示したい場合は、図5図7を飛ばしてください。

まず、[T_日別売上]テーブルをもとにオートレポート機能でレポートを作成します(図5)。

図5
1)[T_日別売上]テーブルを選択
2)[作成]タブをクリック
3)[レポート]をクリック

オートレポート機能でレポートを作成すると、「表形式レイアウト」と呼ばれるレポートが作成され、そのレイアウトビューが表示されます。ここに、累計の対象になるフィールドを追加してください(図6)。「表形式レイアウト」では、フィールドを追加すると自動で整列するので、簡単にレイアウトできます。

図6
1)[T_日別売上]テーブルをもとにレポートが作成された
2)[デザイン]タブをクリック
3)[既存フィールドの追加]ボタンをクリックしてフィールドリストを表示
4)[売上]フィールドを[売上]列の右側にドラッグ
Access 2007の場合は、[書式設定]タブをクリック

[売上]列が2つ並ぶので、新しく追加した方の列見出しを「売上」から「累計」に修正します(図7)。

図7
1)テキストボックスが追加され、[売上]フィールドのデータが表示された
2)ラベルの文字上をクリックするとカーソルが表示されるので、「売上」を「累計」に変更して[Enter]キーを押す

以上で準備が整いました。ここからが、累計設定の本番です。ポイントは、テキストボックスの[コントロールソース]プロパティで累計対象のデータを選び、[集計実行]プロパティで[全体]を選ぶことです。図5図7のように操作した場合は、[コントロールソース]プロパティには累計対象のフィールドが設定されているはずなので、[集計実行]プロパティのみを設定しましょう(図8)。自分で手動で新しいテキストボックスを配置した場合は、[コントロールソース]プロパティと[集計実行]プロパティの両方を設定してください。

図8
1)[累計]列の任意のテキストボックスをクリックすると、列全体が選択される
2)[プロパティシート]ボタンをクリック※1
3)プロパティシートが開いたら、[データ]タブをクリック
4)[コントロールソース]に[売上]と表示されていることを確認※2
5)[集計実行]プロパティで[全体]を選択
6)累計が表示された
※1 Access 2007の場合は、[配置]タブの[プロパティシート]ボタンをクリック
※2 手動でテキストボックスを配置した場合は、[コントロールソース]で集計対象のフィールドを設定する

メモ

[集計実行]プロパティ

[集計実行]プロパティは、レポートに配置したテキストボックス特有の設定項目です。設定値は[しない][グループ全体][全体]の3つです。

  • しない:累計を計算しない(既定値)
  • グループ全体:グループ化されたレポートで、グループごとに連番を振り直す
  • 全体:レポートの全レコードを通した累計が求められる
スポンサーリンク

関連記事