• ベストアンサー

Accessのクエリーで合計を出したい

WinXPでAccess97を使用しています。 数値型のフィールドで、名前が「1」「2」・・・「50」とついてます。これをクエリーで、それぞれのフィールドの値を合計する演算フィールド「合計」を作成したいと思います。 「合計:[1]+[2]+・・・[50]」でもいいのですが、式が長くなります。ForNext文などVBAのループを使ってモジュールに記述して、合計を出す方法はありますか?

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

  • ベストアンサー
noname#4564
noname#4564
回答No.3

Public Function GetFieldsTotal(ByRef strTblName As String) As Long Dim db As DAO.Database Dim tbl As DAO.TableDef Dim rs As DAO.Recordset Dim strSql As String Dim i As Long On Error Goto ErrLine Set db = CurrentDb() Set tbl = db.TableDefs(strTblName) strSql = "SELECT " With tbl For i = 0 To .Fields.Count strSql = strSql & "[" & .Fields(i).Name & "] + " Next i End With strSql = Left$(strSql, Len(strSql) - 3) strSql = strSql & " As Total" strSql = strSql & " FROM " & strTblName strSql = strSql & " WHERE ........" Set rs = db.OpenRecordset(strSql, dbOpenSnapshot) GetFieldsTotal = rs.Fields(0).Value rs.Close db.Close ExitLine: Set rs = Nothing Set tbl = Nothing Set db = Nothing Exit Function ErrLine: '例外発生時の戻り値は再考されたい。 GetFieldsTotal = -1 Resume ExitLine End Function 例えば、↑こんな風にでもすれば、一応合計は求まる理屈ですが、性能が向上する訳ではないので、抜本的な解決にはなりません。 やはり、テーブル設計を見直すのがスジかと。 # [ ]で括らないと使えない識別子を使ってる時点でDQ(略)と思われ。  

minami373
質問者

お礼

うまく合計が出せました!ありがとうございます!! >やはり、テーブル設計を見直すのがスジかと。 はい、ご指摘通り見直します。私の無理な質問に対してご丁寧にコードまで書いていただき、本当にありがとうございました(*^_^*)

その他の回答 (2)

  • kojitti
  • ベストアンサー率32% (449/1386)
回答No.2

sum関数ではだめですか? SELECT SUM(fieldname) FROM tablename WHERE conditions

minami373
質問者

補足

早速ありがとうございます。複数のレコードを集計するのではないのですが、SUM関数を使うのでしょうか?

noname#4564
noname#4564
回答No.1

> ForNext文などVBAのループを使ってモジュールに記述して、合計を出す方法はありますか? の前に、タコなテーブル設計の見直しの方が先決だと思いますが。

minami373
質問者

お礼

ありがとうございます。ご指摘の通りですね。無理なテーブル設計になっています。

関連するQ&A

  • アクセスのクエリ フィールドの合計

    フィールドの合計 アクセスのクエリでいくつかのフィールドの合計を出そうとして クエリのフィールドに以下の式をいれております。 ⇒合計:([A])+([B])+([C]) (例えば[A][B][C]のフィールドの合計を出すとして) しかし、[A]の値が1、[B]の値が2、[C]の値が2と入っている場合は5と合計値が当然でますが 例えば[C]のフィールドが空欄の場合、合計値欄が空欄で表示されます。 非常に簡単な質問かと恐縮ですがおしえてください!

  • ms access クエリの集計について

    こんにちは ms accessのクエリで、文字列として入力されている数字を数値扱いに直してその合計を出そうとしているのですが、特定の値を指定して合計を出そうとすると値がマイナスになってしまいます。 例 式1:sum(val(nz[フィールド名]))=1) フィールドに1とあるレコードを足して合計を出す場合です。値がマイナスになってしまいます。nzは別のクエリ使用時に空欄があるとまずいので入れてあります。 左隣で別のフィールドでグループ化し、ここでは演算を選択しています。

  • アクセス・クエリーでのフィールド内の関数式について

    アクセス・クエリー結果の中に"合計"というフィールド(値)があるのですが、そのフィールドを基に隣のフィールドに値がマイナスであれば、反映する式を組みました。 計算結果は、ちゃんと反映されるのですが、結果の形式がどうもテキスト表示になっているみたいです。 数値に置き換えるような式も組んでみたものの、なかなかうまくいかないので、ご質問させていただきました。 よろしくお願いします。

  • アクセスのクエリでパラメータを表示させない方法は?

    超初心者の質問ですみません。。 アクセスのクエリで、ある数字の全体に対して占める割合を求めるため、以下のような式をいれています。 フィールドC: [フィールドA]/[フィールドB] このクエリを開いたときに毎回パラメータが表示されるのですが、これを表示させないためにはどのようにすればよいのでしょうか?OKを2回押せばきちんと計算された値が入ってくるのですが、毎回OKを押さずに開けるようにしたいです。 ちなみに、フィールドAとフィールドBは、あるテーブルに入っている値をクエリ側で 集計 を「合計」に設定して求めた値が入っていて、フィールドA~Cは同じクエリの中にあります。 VBAやSQLはまったく理解できません。 よろしくお願いします。

  • アクセスのクエリで

    アクセスのクエリで、テーブルAのフィールド1が空白の場合は、0と表示し、(数値型)そうでない場合はフィールド1の値を表示するにはどの様にしたら良いですか? 誰か教えて下さい。よろしくお願いします。

  • ACCESS クエリ 正数のみ演算の対象としたい

    ACCESS2003で作業中です。 選択クエリの数値で「正数」のみ演算の対象としたいのですが、上手くいきません。 クエリのデータシートビューは現在以下の状態です。 (合計フィールドは演算で  合計:[ポイント1]+[ポイント2]+[ポイント3] と単純に足しているだけです。) NO 氏名 ポイント1 ポイント2 ポイント3  合計 1  田中  10    20     -5        25 2  鈴木  20    -10     10        20 これを「正数」のみの合計で以下のように表示をしたいと考えています。 マイナスの数値は計算に含まれないように、何等かの設定をしたいと考えています。 NO 氏名 ポイント1 ポイント2 ポイント3  合計 1  田中  10    20     -5      30 2  鈴木  20    -10     10       30 最終的にはこれをフォームで表示しようと思っています。 クエリ元テーブルの各ポイント1~3のフィールドのデータ型は数値型で、フィールドサイズは倍精度浮動小数点型です。 何かよい方法があれば、是非教えて下さい。よろしくお願い致します。

  • 集計クエリで

    Access2002を利用しています。 集計クエリで、たとえば、商品ごとの重量*料金の合計(送料)を取りたいとした時、 フィールドの欄で、送料:Sum([重量]+[料金])で、集計を演算とするのと 送料:[重量]*[送料]として、集計で合計とするのでは、どうちがうのですか? 例がおかしいとおもうのですが、フィールドで集計関数を入れて、集計欄で演算とするのと、 フィールドに式を入れて、集計で合計とするのとどちらが正しいのか、またこの両者は違うのかを教えてください。

  • 演算フィールドが、パラメータクエリになってしまうのはなぜ?

    アクセス2003を使っているのですが、演算フィールドを作るために、フィールド名に[]を使うと、パラメータクエリとして動作してしまうのですがなぜでしょうか? 同じように作り直すと、正常に、演算フィールドとして、動作するのですが、パラメータクエリと演算フィールドの式は、同じ[]を使いますが、どこが違うと、どっちになるのでしょうか? 今は、作ってみないと、どっちになるかわかりません。

  • Accessクエリに入力する式について教えてください。

    こんにちはWin98SE/Access2000です。 例えば AフィールドのチェックボックスがONで尚且つ、Bフィールドに数値型の値が入っていて、さらにCフィールドに日付が入った時に DフィールドにBフィールドの値を取込むと言う作業をAccessにさせたいのですが、Accessのクエリ(デザインビューのフィールドか抽出条件に設定)で関数又はSQLを使用して実現できますか。 もし出来るようでしたら、例的なもので結構ですので式等アドバイスをいただけないでしょうか宜しくお願いします。 (関数&SQL初心者です。)

  • Access2007 クエリをつかった集計

    初めて質問させて頂きます。 現在Access2007を利用してアンケート結果の集計を行いたいと考えています。 質問内容ごとにフィールドが作られており、フィールドには質問の回答として1~4の数値が入力してあります。 そこでレコード毎に同じ値が入力されているフィールドがいくつあるか フィールドの数を算出したいのです。(例えば、1という数値が入力されたフィールドがいくつ有るか) (例)       フィールド1 フィールド2 フィールド3 回答1の数 レコード1   1       1       2       2 レコード2   2       1       2       1 レコード3   1       1       1       3                                  ↑                              この値を算出したい どのようにすれば算出出来るでしょうか?  クエリでできるのでしょうか? Accessについてはまったく使ったことが無く、まったくの初心者なので、質問の仕方も悪く分かりづらいと思いますがよろしくお願いします。

専門家に質問してみよう