- ベストアンサー
アクセスのレポートでのグループ内平均の方法
アクセス2000を使用しています。 レポートでグループごとに集計を表示するようにしています。 数値に正と負の数値がまざりあっています。 平均値を正と負の数値で別々に出したいのですが可能でしょうか? 全ての数値の平均値の出し方は分かるのですが分けようにも どこをどうしたらいいかわかりません。ご教授お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
現状の 平均値のコントロールソースが、=avg([数値コントロール名]) になっているのなら 正平均値は、=sum(iif([数値コントロール名]>0,[数値コントロール名],0)) /sum(iif([数値コントロール名]>0,1,0)) だと?
その他の回答 (4)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
>区分=1となっていますが区分はグループの名前で間違いないですか? >フォームで区分の名前を検索し、レポートに表示するようにしています。 >グループ分けしている名前=平均を出したいグループの名前という認識でよろしかったですか? >うまく表示されません。 添付図のレポートのレコードソースは、 SELECT Test.ID, Test.区分, Test.数量 FROM Test; のようです。 また、並び替え/グループ化は添付図のようです。
補足
ほんとに何度もすいません。。。 レポートのレコードソースは選択クエリを使用していますので クエリの名前になっています。 レポートはフォームと連動していてフォームに品名を入力するとその品名のレポートが 表示されるようになっています。 どうしていいか分かりません。。。お願いします
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足:添付図が見にくいようなので・・・。 =DAvg("数量","TEST","区分=1 AND 数量>=0") まず、DAvg()を試されて、その後に3倍速化に挑まれたがいいかもです。 http://www.accessclub.jp/ado/
補足
やはりエラー表示されるのですが。。。 区分=1のあたりなのかな?と思っています。 何回もすいません>_< コントロールソースに下記を入力しています。 =DAvg("数値","レポート名","品名=1000B-1 AND 数値>=0")
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
色んなやり方があるかと思いますが・・・。ここでは、添付図のやり方を紹介します。 =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
補足
申し訳ございませんがもう少し詳しく教えて頂けませんでしょうか? =DBLookup("SELECT AVG(数量) FROM TEST WHERE 区分=1 AND 数量<0") 上記の文はコントロールソースに入力でいいんでしょうか? コントロールソースに入力すると#Name?となります。
お礼
ありがとうございました!出来ました!助かります。