• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessで順順に掛け算させりSQLorVBA)

Accessで順順に掛け算させりSQLorVBA

このQ&Aのポイント
  • Microsoft Accessでゲームの持ち金増減率を順番に掛け算するSQLもしくはVBAを教えて頂けないでしょうか。
  • ゲームごとの総増減率を計算するためには、各ゲームの持ち金増減率を順番に掛け合わせる必要があります。
  • SQLもしくはVBAを実行することで、ゲームごとの総増減率を計算することができます。

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

  • ベストアンサー
回答No.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].ゲーム;

unique
質問者

お礼

ありがとうございます。バッチリ動きました。

その他の回答 (2)

回答No.2

SELECT [Table A].人, [Table A].ゲーム, CDbl(get_multiple([ゲーム])) AS 総増減率 FROM [Table A] GROUP BY [Table A].人, [Table A].ゲーム;

回答No.1

下記を「モジュール」に登録 '-------------------------------------------------- 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].ゲーム; パフォーマンスが悪い... もっとスマートな方法があるかも...

unique
質問者

お礼

ありがとうございます。ばっちり動きました。教えていただいた上でまた質問して申し訳ないのです。人別、ゲーム別に結果を出したいと思い、モジュールをいじったのですが、うまくいきません。どのように修正すればよいのかご教授頂けないでしょうか。宜しくお願い致します。 --人----ゲーム--持ち金増減率-- ---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

関連するQ&A