- ベストアンサー
Accessで順順に掛け算させりSQLorVBA
- Microsoft Accessでゲームの持ち金増減率を順番に掛け算するSQLもしくはVBAを教えて頂けないでしょうか。
- ゲームごとの総増減率を計算するためには、各ゲームの持ち金増減率を順番に掛け合わせる必要があります。
- SQLもしくはVBAを実行することで、ゲームごとの総増減率を計算することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
サブルーチン修正するの忘れてました... '-------------------------------------------------- Public Function get_multiple(stHuman As String, stGame As String) As Currency Dim curValue As Currency Dim RS As DAO.Recordset Dim stSQL As String 'テーブルを条件付で開く stSQL = "SELECT [Table A].持ち金増減率 " & _ "FROM [Table A] " & _ "WHERE ((([Table A].人)='" & stHuman & "') " & _ "AND (([Table A].ゲーム)='" & stGame & "'));" Set RS = CurrentDb.OpenRecordset(stSQL, dbOpenSnapshot) 'テーブルの最後までループ curValue = 0 Do Until RS.EOF = True If curValue = 0 Then curValue = RS("持ち金増減率").Value Else If RS("持ち金増減率").Value = 0 Then Else curValue = curValue * RS("持ち金増減率").Value End If End If '次のレコードへ RS.MoveNext Loop 'オブジェクト解放 Set RS = Nothing '戻り値設定 get_multiple = curValue End Function '-------------------------------------------------- SELECT [Table A].人, [Table A].ゲーム, CDbl(get_multiple([人],[ゲーム])) AS 総増減率 FROM [Table A] GROUP BY [Table A].人, [Table A].ゲーム;
その他の回答 (2)
- how-do-you-do
- ベストアンサー率56% (59/104)
SELECT [Table A].人, [Table A].ゲーム, CDbl(get_multiple([ゲーム])) AS 総増減率 FROM [Table A] GROUP BY [Table A].人, [Table A].ゲーム;
- how-do-you-do
- ベストアンサー率56% (59/104)
下記を「モジュール」に登録 '-------------------------------------------------- Public Function get_multiple(stGame As String) As Currency Dim curValue As Currency Dim i As Long Dim RS As DAO.Recordset Dim stSQL As String 'テーブルを条件付で開く stSQL = "SELECT [Table A].持ち金増減率 " & _ "FROM [Table A] " & _ "WHERE ((([Table A].ゲーム)='" & stGame & "'));" Set RS = CurrentDb.OpenRecordset(stSQL, dbOpenSnapshot) 'テーブルの最後までループ curValue = 0 Do Until RS.EOF = True If curValue = 0 Then curValue = RS("持ち金増減率").Value Else If RS("持ち金増減率").Value = 0 Then Else curValue = curValue * RS("持ち金増減率").Value End If End If '次のレコードへ RS.MoveNext Loop 'オブジェクト解放 Set RS = Nothing '戻り値設定 get_multiple = curValue End Function '-------------------------------------------------- ※参照設定にて「Microsoft DAO *.* Object Library」が必要です で、SQL作成 SELECT [Table A].ゲーム, CDbl(get_multiple([ゲーム])) AS 総増減率 FROM [Table A] GROUP BY [Table A].ゲーム; パフォーマンスが悪い... もっとスマートな方法があるかも...
お礼
ありがとうございます。ばっちり動きました。教えていただいた上でまた質問して申し訳ないのです。人別、ゲーム別に結果を出したいと思い、モジュールをいじったのですが、うまくいきません。どのように修正すればよいのかご教授頂けないでしょうか。宜しくお願い致します。 --人----ゲーム--持ち金増減率-- ---A---ポーカー----1.2 ---A---ポーカー----3.5 ---A---ポーカー----1.0 ---A---ポーカー----0.5 ---A---スロット----1.1 ---A---スロット----0.5 ---A---スロット----0.8 ---B---ポーカー----1.8 ---B---ポーカー----2.0 結果 --人----ゲーム--総増減率-- ---A---ポーカー----2.1 ---A---スロット----0.44 ---B---ポーカー----3.6
お礼
ありがとうございます。バッチリ動きました。