• ベストアンサー

アクセスのレポートでのグループ内平均の方法

アクセス2000を使用しています。 レポートでグループごとに集計を表示するようにしています。 数値に正と負の数値がまざりあっています。 平均値を正と負の数値で別々に出したいのですが可能でしょうか? 全ての数値の平均値の出し方は分かるのですが分けようにも どこをどうしたらいいかわかりません。ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

現状の 平均値のコントロールソースが、=avg([数値コントロール名]) になっているのなら 正平均値は、=sum(iif([数値コントロール名]>0,[数値コントロール名],0)) /sum(iif([数値コントロール名]>0,1,0)) だと?

IloveCECIL
質問者

お礼

ありがとうございました!出来ました!助かります。

その他の回答 (4)

回答No.4

>区分=1となっていますが区分はグループの名前で間違いないですか? >フォームで区分の名前を検索し、レポートに表示するようにしています。 >グループ分けしている名前=平均を出したいグループの名前という認識でよろしかったですか? >うまく表示されません。 添付図のレポートのレコードソースは、 SELECT Test.ID, Test.区分, Test.数量 FROM Test; のようです。 また、並び替え/グループ化は添付図のようです。

IloveCECIL
質問者

補足

ほんとに何度もすいません。。。 レポートのレコードソースは選択クエリを使用していますので クエリの名前になっています。 レポートはフォームと連動していてフォームに品名を入力するとその品名のレポートが 表示されるようになっています。 どうしていいか分かりません。。。お願いします

回答No.3

補足:添付図が見にくいようなので・・・。 =DAvg("数量","TEST","区分=1 AND 数量>=0") まず、DAvg()を試されて、その後に3倍速化に挑まれたがいいかもです。 http://www.accessclub.jp/ado/

IloveCECIL
質問者

補足

やはりエラー表示されるのですが。。。 区分=1のあたりなのかな?と思っています。 何回もすいません>_< コントロールソースに下記を入力しています。 =DAvg("数値","レポート名","品名=1000B-1 AND 数値>=0")

回答No.2

補足されている要領で間違いありませんよ。

IloveCECIL
質問者

補足

区分=1となっていますが区分はグループの名前で間違いないですか? フォームで区分の名前を検索し、レポートに表示しるようにしています。 グループ分けしている名前=平均を出したいグループの名前という認識でよろしかったですか? うまく表示されません。

回答No.1

色んなやり方があるかと思いますが・・・。ここでは、添付図のやり方を紹介します。 =DBLookup("SELECT AVG(数量) FROM TEST WHERE 区分=1 AND 数量<0") =DBLookup("SELECT AVG(数量) FROM TEST WHERE 区分=1 AND 数量>=0") ここでは、ユーザー関数 DBLookup()を用いています。もちろん、AccessのDLookup()、DAvg()でも実現できます。両者の差異は、前者が後者より3倍速で動作すること。SQL文全体を書けること。それだけの違いです。 Public Function DBLookup(ByVal strQuerySQL As String, _              Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup   Dim DataValue   Dim rst     As ADODB.Recordset   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .MoveFirst       DataValue = .Fields(0)     End If   End With Exit_DBLookup: On Error Resume Next   rst.Close   Set rst = Nothing   DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)   Exit Function Err_DBLookup:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBLookup End Function

IloveCECIL
質問者

補足

申し訳ございませんがもう少し詳しく教えて頂けませんでしょうか? =DBLookup("SELECT AVG(数量) FROM TEST WHERE 区分=1 AND 数量<0") 上記の文はコントロールソースに入力でいいんでしょうか? コントロールソースに入力すると#Name?となります。

関連するQ&A