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

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

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

Microsoft Accessで以下の計算をするSQLもしくはVBAを教えて頂けないでしょうか。 ゲームを遊んだごとの持ち金増減率を順番に掛け算することで総増減率を計算をしたいのです。 例えば、、 ○Table A --ゲーム--持ち金増減率-- ポーカー----1.2 ポーカー----3.5 ポーカー----1.0 ポーカー----0.5 スロット----1.1 スロット----0.5 スロット----0.8 SQL、もしくはVBAを実行すると ↓ ○Table 結果 --ゲーム----総増減率-- ポーカー----2.1 (=1.2×3.5×1×0.5) スロット----0.44(=1.1×0.5×0.8) (ゲームごとに総増減率を計算する。) 宜しくお願い致します。

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

  • ベストアンサー
回答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

  • RAD StudioでMDBのクエリのアクセス。

    RAD Studioのコンポーネントを使用して、Microsoft AccessのMDB上のクエリを 読み込んだり、または実行したりできるでしょうか? ( 例えば、VBAだと、DoCmdのOpenQuery のようなもの ) 現在、TADOQueryにSQL分を、指定して、開いたり実行したりしていますが テーブルの内容が変わるたびに、SQL文を修正しなければならないので MSAで編集して、クエリとして保存すれば、非常に便利です。 以上よろしく、お願いします。

  • AccessのSQLについて教えてください。

    Excel+VBA から、ADOを使って、Accessを操作しようとしています。 なんとか、sqlを実行できるようになったのですが、 一点、分からないところが出てきましたので、教えてください。 insert文で、レコードを追加したとき、追加されたレコードのIDを取得したいのですが、 どのようにすれば良いかわかりません。 コードは次のようにしています。 cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & データベース名 & ";" sql = "INSERT INTO テーブル名(フィールド) VALUES(値)" cnn.Execute sql 以上、すみませんが、よろしくお願いいたします。

  • accessでcommitができますか?

    accessで複数のテーブルから1つのテーブルに書き込みをしています。VBAでSQL文を作成しDoCmd.RunSQLでinsertを実行しています。データが多いと遅くなるようです。Commitとか実行できるのでしょうか?そうすれば早くなりますか?ご指導のほどお願いいたします。

  • アクセスVBAのSQLについて

    (1)テキストファイルに記述したSQL文のセットをVBAで実行するコマンドはありますか? (2)テーブルを作成する際の、DB指定は 「create table "DB名"."テーブル名"…」としたらよいでしょうか (3)"DB名". を省略できるのはどのような場合ですか? (4)Docmd.RunSQL "" で一度に複数のSQL文を実行できますか? よろしくお願いします。m(_ _)m

  • ACCESS2002のupdateの副問合せについて教えてください

    ひとつのテーブルの情報を、もうひとつのテーブルに反映させられなくて困っています。 おそらくupdateの副問合せの書き方が悪いと思うのですが、どこが悪いのか分かりません。 access2002 VBAで、同じフィールド構成を持つ2つのテーブルがあります。 TABLE_A -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |111111|AAAA|BBBB| |222222|CCCC|DDDD| |333333|EEEE|FFFF| |444444|GGGG|HHHH| -------------------------- TABLE_B -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |222222|ZZZZ|YYYY| |333333|XXXX|WWWW| -------------------------- このうち、ひとつのテーブル(TABLE_A)のField1 と Field2 の値を もうひとつのテーブル(TABLE_B)のField1 と Field2 の値に変更したいのです。 条件は、P_Keyが同一のレコード同士です。 実行結果は以下のようにしたいのです。 TABLE_A (TABLE_Bは更新しないため変更無し) -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |111111|AAAA|BBBB| |222222|ZZZZ|YYYY| |333333|XXXX|WWWW| |444444|GGGG|HHHH| -------------------------- VBAでupdateのSQLを書いているのですが、うまくいきません。 以下のSQLではDMLが正しくないのエラーになってしまいます。 (すみません。正式なエラーメッセージは失念しました) update TABLE_A set( TABLE_A.Field1,TABLE_A.Field2 ) = ( select TABLE_B.Field1,TABLE_B.Field2 from TABLE_B where TABLE_A.P_Key = TABLE_B.P_Key ); テーブル名に別名をつけたりしても同様にDMLが正しくないと怒られます。 質問は、以下の2つです。 1.上記更新は、ひとつのupdateのSQLで可能でしょうか?   それともTABLE_B を Selectでまわして、TABLE_Aのレコードを一行ずつ   更新していく必要があるのでしょうか? 2.1.が可能の場合、私の書いたSQLについてご助言をいただけませんでしょうか? もしご存知の方おられましたら、ご教示をお願いできませんでしょうか? 以上です

  • ACCESS2000 INPUTBOX でテーブル名を入れながらテーブル作成

    こんにちは。 ACCESS2000 で、さいきん初心者に毛が生えてきました。 通常 VBA を書くときはマクロでいったん作成してから、都合よく書き直しています。 が、マクロに「テーブル作成」という選択肢がありません。 それでマニュアルを見ながら CREATE TABLE 0310 ( WHS CHAR(30), CODE CHAR(30), NAME CHAR(50), LOC CHAR(30), QTY LONG ); というSQL文を書きました。これで必要なテーブルは得られるのですが、このテーブル名が毎日変わるので(日付です)、VBA のINPUTBOX でテーブル名を入れながら毎日の作業をしたいのです。 ちなみにSQL 文はQUERY として登録し、マクロの「クエリを開く」で実行することだけはできるんですが。 よろしくお願いします。

  • Accessで "WTH COMPRESSION"

    お世話になります。 Access2007でUnicode圧縮の属性のテーブルをSQLで作成したいので、下記のSQLを作成しました。 クエリよりSQLを実行すると"WITH"の箇所でエラーが発生してしまいます。 何がいけないんでしょうか? いろいろ、調べてみましたがわかりませんでした。 どんな小さなことでも良いので、教えていただければ幸いです。 よろしくお願い致します。 ↓↓↓↓↓↓作成したSQL↓↓↓↓↓ CREATE TABLE XXXXXX ( a1 TEXT WITH COMPRESSION , a2 TEXT WITH COMPRESSION );

  • SQLサーバーのテーブルに対してアクセスで更新クエリを行ないたい

    こんばんは。 ・vista ・アクセス2003 ・SQL Server 2005 です。 SQL ServerからテーブルをMDBへリンクしているのですが そのテーブルに対し、アクセス側で更新クエリを実行しようとすると 実行時エラー '3157': ODBC--リンク テーブル'テーブル名'での更新に失敗しました。 [Microsoft][ODBC SQL Server Driver]時間切れになりました。(#0) と言うエラーになり、更新クエリができません。 どうすればアクセスでSQLサーバーのテーブルに対して更新クエリを行えるのでしょうか? よろしくお願いします。

  • Access VBA

    AccessとWordの連携について教えてください。 フォーム[会社データ]上に「cmd実行」ボタンを配置しています。 行いたいのは次の作業です。 上記「cmd実行」ボタンのクリックによりWordを起動(新規文書)し,フォームに表示しているレコードから[会社名]テキストボックスのデータを2行目のセンターに,[担当者]テキストボックスのデータを4行目の左端にそれぞれ出力する。 AccessのVBAで[ツール][参照設定]で[Microsoft Word Object Library]を選択済みです。 どなたかご教授いただければと思います。何とぞよろしくお願いいたします。 なお,AccessのVBAで[ツール][参照設定]で[Microsoft Word Object Library]を選択済みです。

  • Accessマクロでパラメータークエリ実行

    Microsoft Accessのマクロでパラメータークエリを実行する方法を調べると、VBAで実行する方法しか出てきませんが、マクロではできないでしょうか。 検索フォームに条件を入力して検索するマクロを作りたいです。

専門家に質問してみよう